/ / Трябва да върна броя на думите в c sting след като вземем потребителски вход - c ++, масиви, for-loop, c-strings, isspace

Трябва да върна броя думи в c inteing след взимане на потребителски вход - c ++, масиви, for-loop, c-strings, isspace

Трябва да направя програма, която да вземе вход от потребителя и след това да върне броя на думите, въведени в низ. Съхранявам потребителски вход в масив char words[256]; Имам функция, наречена countWords, Тя се върти през масива и ако срещне пространство, той се увеличава. if(words[i] == "") ако се достигне нулев знак, броячът се спира. След това се връща nSpaces + 1 да отчете първата дума.

Но моят изход изглежда произвежда броя на знаците в низ вместо това. Как може да се определи това.

#include <iostream>
#include <cstdlib>
using namespace std;

//Function Prototype
int countWords(char words[]);

int main(){

char words[256];

cout << "Enter a sentence: ";
cin.getline(words, 256);

int word_num = countWords(words);
cout << "The number of words in a string is: " << word_num << endl;

system("PAUSE");
return 0;
}

int countWords(char words[]){
int nSpaces = 0;
//unsigned int i = 0;

/*while(isspace(words[i])){
i++;
}*/

for (int i=0; i<256; i++){
if(isspace(words[i])){
nSpaces++;
// Skip over duplicate spaces & if a NULL character is found, we"re at the end of the string
//while(isspace(words[i++]))
if(words[i] == "")
nSpaces--;
}
}
// The number of words = the number of spaces + 1
return nSpaces + 1;
}

Резултатът е:

Enter a sentence: Yury Stanev
The number of words in a string is: 7

Отговори:

2 за отговор № 1

Вие не спирате цикъла, когато стигнете до нулевия символ. Вие само тествате за нулевия знак вътре в if(isspace(words[i])) блок, но ако знакът е пространство, то тогаване може да бъде "null" терминатор. В резултат, вие четете покрай края на входа и преброявате пространствата в неинициализираната част на низа.

int countWords(char words[]){
int nSpaces = 0;

for (int i=0; i<256 && words[i] != ""; i++){
if(isspace(words[i])){
nSpaces++;
}
}
// The number of words = the number of spaces + 1
return nSpaces + 1;
}

0 за отговор № 2

isspace брои нови линии (n), tabs (t), v, f и r.

Може би искате само бели пространства? Проверете само за "" и "t".