No hay estándar y rápido forma de hacerlo. Puedo pensar en algunas opciones.
supongamos que tenemos:
char *text = new char[20];
cin >> text;
Nota - nos necesidad que sabemos que la capacidad es de 20! Te recomendaría usar alguna constante para esto, especialmente si esto también se usará para otras cadenas.
Vale, primera opción - utilizar std::stringstream
std::stringstream ss;
ss << setw(20 - 1) << setfill('-') << text;
// ^^^^ we need one byte for the '\0' char at the end
ss >> text;
Pero esto es bastante lento.
llenar los caracteres a mano:
int length = strlen(text);
for(int i = length; i < 20 - 1; ++i) // again - "20-1" - '\0'
{
text[ i ] = '-';
}
text[ 20 - 1 ] = '\0'; // don't forget to NULL-terminate the string
Y la mejor manera, en mi opinión - deshacerse de estos char*
cosas (que ha marcado la pregunta c++) y solo use std::string
.
std::string sText;
std::cin >> sText;
sText.resize(20, '-'); // NOTE - no need to NULL-terminate anything
Voilà! (:
De esta manera es mucho más clara y que no es necesario para llevar sobre el uso de delete[] text;
al final (que no es tan trivial, a veces, sobre todo en caso de alguna excepción antes delete[]
- esto le dará 100 la memoria% de fugas. por supuesto, siempre se puede utilizar punteros inteligentes .. pero punteros inteligentes para esto ?! :))
por supuesto, se puede escribir en lugar de 19
20-1
, sólo quería "resalte" -1
, en caso de que use alguna constante.
Si quisiera resaltar el '-1', ¿por qué no simplemente usar una constante en lugar de' 20'? :) Números mágicos ftl. – Xeo
Porque si este tamaño no se usará más, no hay necesidad de agregar constante para 2-3 líneas de código (que _ son_ una después de la otra). O al menos, no lo haría. Tenga en cuenta que ya le aconsejé a @Ata que use la constante en el otro caso. –