Есть ли способ использовать cin.getline () без предварительного определения размера массива char?

StackOverflow https://stackoverflow.com/questions/2569662

  •  24-09-2019
  •  | 
  •  

Вопрос

В основном моя задача - отсортировать кучу строк переменной длины без учета регистра.Я так понимаю, что есть функция strcasecmp (), которая сравнивает cstrings, но не работает со строками.Сейчас я использую getline () для строк, поэтому я могу просто читать строки по одной строке за раз.Я добавляю их в вектор строк, а затем конвертирую в строки cstrings для каждого вызова strcasecmp ().Вместо того, чтобы преобразовывать каждую строку в cstring перед сравнением с strcasecmp (), мне было интересно, есть ли способ использовать cin.getline () для cstrings без предопределенного размера массива char.Или лучше всего было бы просто прочитать строку, преобразовать в cstring, сохранить в векторе, а затем отсортировать?

Это было полезно?

Решение

Я полагаю, что под «преобразованием в cstring» вы подразумеваете использование члена c_str() строки.Если это так, то в большинстве реализаций это на самом деле не преобразование, а просто средство доступа.Разница важна только в том случае, если вы беспокоитесь о производительности (что похоже на вас).Внутренне std :: strings (почти всегда, но технически не обязательно) представлены как "cstring".Класс позаботится об управлении его размером за вас, но это просто динамически выделяемая cstring под ним.

Итак, чтобы напрямую ответить: вы должны указать размер массива при использовании cin.getline.Если вы не хотите указывать размер, используйте getline и std :: string.В таком подходе нет ничего плохого.

Другие советы

C ++ сам по себе довольно эффективен.Если у вас нет действительно доказанной необходимости поступать иначе, позвольте этому сделать свое дело.

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top