Мне нужно вернуть количество слов в строке после ввода пользовательского ввода

Мне нужно сделать программу, которая принимает данные от пользователя, а затем возвращает количество слов, введенных в строку. Я храню пользовательский ввод в массиве char words[256]; У меня есть функция под названием countWords, Он проходит через массив и, если он встречает пробел, его счетчик увеличивается. if(words[i] == '\0') если достигнут нулевой символ, счетчик останавливается. Потом вернусь 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] == '\0')
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

0

Решение

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

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

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

Другие решения

isspace считает новые строки (\ n), табуляции (\ t), \ v, \ f и \ r.

Возможно, вы хотите только пробелы? Проверьте только «» и «\ t».

0

По вопросам рекламы [email protected]