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; } 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++) Ну и, кроме того, в этой программе считается число пробелов, а не слов. На самом деле между словами может стоять несколько пробелов или другие знаки, поэтому правильнее было бы считать слова, например, по концам слов, то есть по количеству пар <символ, который может входит в слова><символ, который не может входить в слова>. Но это, конечно, программируется немного сложнее. Link to comment Share on other sites More sharing options...
little_greg Posted June 4, 2009 Author Report Share Posted June 4, 2009 Спасибо. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now