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