У меня есть массив символов, который может содержать 1000 элементов (+1 для "\ 0"). Массив будет заполнен пользовательским вводом. Мне было интересно, есть ли способ проверить, является ли вход больше, чем массив может удерживать. Если я попытаюсь добавить его, программа столкнется, прежде чем я смогу сравнить его размер. Я думал о расширении массива и посмотрел, не меньше ли 1000 символов, но эта идея не кажется мне действительно хорошей.
РЕДАКТИРОВАТЬ:
im, используя std::cin.getline()
чтобы получить вход от пользователя и не может использовать класс Sting
Я думаю, что один из способов проверить это - найти индекс \0
в вашем массиве. Если позиция равна или больше 1000
, вы не должны добавлять к ней больше символов.
Если вы используете cin.getline()
вы можете использовать переменную n
чтобы указать максимальное количество символов, которые вы хотите
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
Здесь вы можете установить n=1001
(он также учитывает завершение char \0
).
Короткий ответ: да.
Используйте std::string
:
std::string line
while (std::getline(std::cin, line))
{
// do something with line
}
Если вам не разрешено использовать std::string
, вы можете либо поместить собственный собственный класс строк, либо просмотреть общие реализации std::getline
и имитировать их (просто не сохраняя его в std::string
).
cin.getline()
поэтому все входные данные немедленно сохраняются в массиве. Это не слишком важно, но это для задания, и мой проф любит обрезать 60% всего, что он может найти неправильно.std::string
.