little_greg Posted June 4, 2009 Report Share Posted June 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; } Quote Link to comment Share on other sites More sharing options...
Тролль Posted June 4, 2009 Report Share Posted June 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++) Ну и, кроме того, в этой программе считается число пробелов, а не слов. На самом деле между словами может стоять несколько пробелов или другие знаки, поэтому правильнее было бы считать слова, например, по концам слов, то есть по количеству пар <символ, который может входит в слова><символ, который не может входить в слова>. Но это, конечно, программируется немного сложнее. Quote Link to comment Share on other sites More sharing options...
little_greg Posted June 4, 2009 Author Report Share Posted June 4, 2009 Спасибо. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.