Jump to content

Строки С++


Recommended Posts

Доброго времени суток. Возникла проблема в программе (подсчет количества слов в строке), если в строку записать более 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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...