C++ 计算句子中的单词数,不包括标点符号和单词之间的多个空格

C++ 计算句子中的单词数,不包括标点符号和单词之间的多个空格,c++,string,boolean,word-count,C++,String,Boolean,Word Count,我正在尝试创建一个程序来计算句子中的字数,但当我找到空格或标点符号(?,!,:,;,或。)时,我不能假设下一个字符是字母。如果我在找一个字母,我需要跳过所有空格和标点符号,直到我找到一个既不是空格也不是标点符号的字母。我还需要考虑到单词之间可能有不止一个空格。我写了一个标点函数: bool is_punctuation (string character) { if (character == "!") return true; else if (charac

我正在尝试创建一个程序来计算句子中的字数,但当我找到空格或标点符号(?,!,:,;,或。)时,我不能假设下一个字符是字母。如果我在找一个字母,我需要跳过所有空格和标点符号,直到我找到一个既不是空格也不是标点符号的字母。我还需要考虑到单词之间可能有不止一个空格。我写了一个标点函数:

bool is_punctuation (string character)

{

    if (character == "!")
        return true;
    else if (character == "?")
        return true;
    else if (character == ";")
        return true;
    else if (character == ":")
        return true;
    else if (character == ".")
        return true;
    else
        return false;
}
我用它来查找用户输入的句子数。我现在需要找到单词计数,但我很难找到一种不使用空间定位的方法。我在函数方面已经做了这么多,但是需要一些帮助!非常感谢您的建议:)

void num_语句(字符串短语)
{
int num_句子=0;
for(int i=0;i
首先,对单个字符使用
std::string
是没有意义的。这就是
char
的用途

现在,用另一种方法来检查字符是否是字母而不是标点符号要容易得多。这很简单:字符是在a-z范围内还是在a-z范围内。在这种情况下,最好包含撇号,例如“it's”看起来像一个单词:

bool is_letter(char c)
{
    return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '\'')
         ? true:false;
}

现在,这难道不像我之前的描述,翻译成代码吗?

你看到了多少句子???
bool is_letter(char c)
{
    return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '\'')
         ? true:false;
}
size_t num_words(const std::string &sentence)
{
    bool previous_char_was_letter=false;
    size_t n=0;

    for (char c:sentence)
    {
        bool this_char_is_letter=is_letter(c);

        if (!previous_char_was_letter && this_char_is_letter)
             ++n;

        previous_char_was_letter=this_char_is_letter;
    }

    return n;
}