在接受用户输入后,我需要 return c 字符串中的单词数

I need to return number of words in c sting after taking user input

我需要制作一个程序来接收用户的输入,然后 return 输入字符串的字数。我将用户输入存储在数组 char words[256]; 中 我有一个名为 countWords 的函数。它循环遍历数组,如果遇到 space 则计数器增加。 if(words[i] == '[=15=]') 如果到达空字符,则停止计数器。然后用returnnSpaces + 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] == '[=11=]')
                    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

isspace 计算新行 (\n)、制表符 (\t)、\v、\f 和 \r。

可能您只想要 white-spaces?仅检查“ ”和“\t”。

当您到达空字符时,您并没有停止循环。您只测试 if(isspace(words[i])) 块内的空字符,但如果该字符是 space 则它也不能是空终止符。结果,您正在阅读输入的末尾,并计算字符串未初始化部分中的 spaces。

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

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