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 Спасибо. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.