/ / Po pobraniu danych wejściowych muszę zwrócić liczbę słów w c sting - c ++, tablice, pętla for, c-łańcuchy, isspace

Muszę zwrócić liczbę słów po wprowadzeniu danych użytkownika - c ++, tablice, pętla for, c-stringi, isspace

Muszę stworzyć program, który pobiera dane wejściowe od użytkownika, a następnie zwraca liczbę słów wprowadzonych do ciągu. Przechowuję dane wejściowe użytkownika w tablicy char words[256]; Mam funkcję o nazwie countWords. Zapętla się przez tablicę i jeśli napotka pole, jego licznik jest zwiększany. if(words[i] == "") po osiągnięciu znaku zerowego licznik jest zatrzymywany. Potem wraca nSpaces + 1 wziąć pod uwagę pierwsze słowo.

Ale moje dane wyjściowe wydają się zamiast tego wytwarzać liczbę znaków w ciągu. Jak to może zostać naprawione.

#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;
}

Wynik to:

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

Odpowiedzi:

2 dla odpowiedzi № 1

Nie zatrzymujesz pętli, gdy dojdziesz do znaku zerowego. Testujesz tylko znak zerowy wewnątrz if(isspace(words[i])) blok, ale jeśli znak jest spacją, to onnie może być również terminatorem zerowym. W rezultacie czytasz poza koniec danych wejściowych i zliczasz spacje w niezainicjowanej części łańcucha.

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 dla odpowiedzi nr 2

isspace zlicza nowe linie (n), tabulatory (t), v, f i r.

Prawdopodobnie chcesz tylko białych znaków? Sprawdź tylko „” i „t”.