Нет стандартного и быстрого способа сделать это.Я могу подумать о некоторых вариантах.
Предположим, у нас есть:
char *text = new char[20];
cin >> text;
Примечание - нам нужно , чтобы знать, что емкостьэто 20!Я бы порекомендовал вам использовать некоторую константу для этого, особенно если это будет использоваться и для других строк.
Хорошо, первый вариант - используйте std::stringstream
std::stringstream ss;
ss << setw( 20 - 1 ) << setfill( '-' ) << text;
// ^^^^ we need one byte for the '\0' char at the end
ss >> text;
Но это довольно медленно.
Заполните символы от руки:
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
И лучший способ , по мне - избавьтесьиз этих char*
вещей (вы пометили вопрос как c ++ ) и просто используете std::string
.
std::string sText;
std::cin >> sText;
sText.resize( 20, '-' ); // NOTE - no need to NULL-terminate anything
Voilà! (:
Этот способ намного более понятен, и вам не нужно продолжать использовать delete[] text;
в конце (что иногда бывает не так тривиально, особенно в случае какого-то исключения до delete[]
-это даст вам 100% утечки памяти. Конечно, вы всегда можете использовать умные указатели .. но умные указатели для этого ?! :))
Конечно, вы можете написать 19
вместо20-1
, я просто хотел «выделить» -1
, если вы используете какую-то константу.