【问题标题】:How to count words from an array of chars in C++如何在 C++ 中计算字符数组中的单词
【发布时间】:2019-08-27 22:27:36
【问题描述】:

我在尝试将字符数组中的字母接收到我的 wordCount 函数以计算数组中每个项目中的单词数时遇到问题。我相信我应该只操作该函数,但不清楚如何将 testCases 数组中的单个字母放入字数统计函数中。

在那之后,我假设我会使用 if 语句来检查读入 wordCount 的字符是否是字母,以及何时结束将它们计为一个单词。

代码如下:

#include <iostream>
using namespace std;

// Function Prototype
int wordCount (char *userEntry);

int main() {
// Constants
const int MAX_LENGTH = 150;

// Local variables
char testCases[][MAX_LENGTH + 1] = { "0",
    "    1   22    3333    44444 ",
    "     testing    ",
    "a",
    "onetwothree",
    "one two three",
    "    testing    a    11   222  three  4  five  ",
    "a b c d e f" };
int wCount = 0;

// loop through test cases and display number of words in each
for (char *entry : testCases) {
    wCount = wordCount(entry);
    cout << "\nNumber of words in the test case '" << entry << "' is: " 
<< wCount << endl;
}

return EXIT_SUCCESS;
}

/*
Function Name:  wordCount
This function counts the # of space-delimited words
in a character string, and returns the count to the
caller.
NOTE: A word is defined as one or more alphabetic
characters separated by one or more spaces,
unless it is the only alphabetic character(s).
*/

int wordCount (char *userEntry) {

return 0;
}

【问题讨论】:

    标签: c++ algorithm function char word-count


    【解决方案1】:

    c++ 中的字符串以空值结尾,这意味着在它们的最后一个字符之后有一个'\0' 字符,其字符代码为0x00。要读取字符串/字符数组的每个字符,只需使用索引运算符[]。 C++ 中的字符串与其他数组一样,索引从 0 到 n-1

    这里是一个for循环的例子,它将把字符串中的一个字符读入一个字符变量中。

    void iterate_through_characters(const char* aString) {
        // starting at n=0 check each n and make sure it is shorter than the
        // width of the array
        // and that it's not the null terminating character
        for (int n = 0; (n < MAX_LENGTH + 1) && (aString[n] != '\0'); n++) {
            // take the character out of the index in the string and store it in aCharacter
            char aCharacter = aString[n];
        }
    }
    

    对于您的特殊情况,您还需要跟踪您是否已经在某个单词中,并且仅在您还没有单词时才计算一个新单词。下面的函数实现了这一点。

    int wordCount(const char* input) {
    
        // this is true if we're in a word
        bool inWord = false; 
    
        // the number of words we've seen defaulting to 0, no words
        int result = 0;
    
        for (int n = 0; (n < MAX_LENGTH + 1) && (aString[n] != '\0'); n++) {
           // if this is a space we're not in a word
           if (aString[n] == ' ') {
               inWord = false; // if we were in a word, we aren't now
           } else if (!inWord) {
               inWord = true; // if we weren't in a word, we are now
               result ++; // increment the number of words we've seen 
           }
       }
       return result;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 2012-12-10
      相关资源
      最近更新 更多