little_greg Опубликовано 4 июня, 2009 Жалоба Поделиться Опубликовано 4 июня, 2009 Доброго времени суток. Возникла проблема в программе (подсчет количества слов в строке), если в строку записать более 8 слов, то результат выдается неверный. Помогите разобраться. #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { char szString[256]; int nCount = 0; gets(szString); //cin.getline(szString, 128); for (int i = 0; szString != '\n'; i++) { if (szString == ' ') { nCount++; } } cout << "There are " << nCount+1 <<" words in this string\n"; system("PAUSE"); return EXIT_SUCCESS; } Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 4 июня, 2009 Жалоба Поделиться Опубликовано 4 июня, 2009 little_greg: Со священным в буддизме числом 8 это никак не связано. Просто строка на экране и строка в представлении C - разные вещи. Строка на экране кончается переводом строки, который выдается клавишей Enter, в этот момент срабатывает функция gets и записывает строку в массив szString, но символ перевода строки при этом заменяется функцией gets на символ окончания строки в C, то есть на символ с кодом 0. Поэтому читать этот массив символов до появления символа перевода строки бессмысленно - если он и попадется, то за пределами введенной строки. Так что надо заменить заголовок цикла for (int i = 0; szString != '\n'; i++) на, например, for (int i = 0; szString; i++) Ну и, кроме того, в этой программе считается число пробелов, а не слов. На самом деле между словами может стоять несколько пробелов или другие знаки, поэтому правильнее было бы считать слова, например, по концам слов, то есть по количеству пар <символ, который может входит в слова><символ, который не может входить в слова>. Но это, конечно, программируется немного сложнее. Ссылка на комментарий Поделиться на другие сайты Поделиться
little_greg Опубликовано 4 июня, 2009 Автор Жалоба Поделиться Опубликовано 4 июня, 2009 Спасибо. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти