Есть ли способ использовать cin.getline () без предварительного определения размера массива char?
Вопрос
В основном моя задача - отсортировать кучу строк переменной длины без учета регистра.Я так понимаю, что есть функция 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 ++ сам по себе довольно эффективен.Если у вас нет действительно доказанной необходимости поступать иначе, позвольте этому сделать свое дело.
родовое слово