Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算c中每个字符串的单词和句子数?_C_Cs50_Readability - Fatal编程技术网

如何计算c中每个字符串的单词和句子数?

如何计算c中每个字符串的单词和句子数?,c,cs50,readability,C,Cs50,Readability,以下是一个练习的说明,我必须解决cs50 pset2可读性问题(从站点粘贴副本): 你的程序应该计算文本中字母、单词和句子的数量。您可以假设字母是从a到z的任何小写字符或从a到z的任何大写字符,由空格分隔的任何字符序列都应算作一个单词,句号、感叹号或问号的任何出现都表示句子的结尾 这些不是完整的说明,只是我有问题的部分 我知道如何计算课文中的字母数,但我不知道如何计算单词和句子。我试着用谷歌搜索它,并使用其他外部资源,但弹出的只是问题的答案,坦率地说,这感觉像作弊。这是我的代码: #包括 #

以下是一个练习的说明,我必须解决cs50 pset2可读性问题(从站点粘贴副本):

  • 你的程序应该计算文本中字母、单词和句子的数量。您可以假设字母是从a到z的任何小写字符或从a到z的任何大写字符,由空格分隔的任何字符序列都应算作一个单词,句号、感叹号或问号的任何出现都表示句子的结尾
这些不是完整的说明,只是我有问题的部分

我知道如何计算课文中的字母数,但我不知道如何计算单词和句子。我试着用谷歌搜索它,并使用其他外部资源,但弹出的只是问题的答案,坦率地说,这感觉像作弊。这是我的代码:

#包括
#包括
#包括
#包括
#包括
内部主(空)
{
整数字母=0;
字符串文本=获取字符串(“文本:”);
int字=0;
for(int i=0;i
此代码计算正确的字母数,但始终键入单词:0。我还没有完成句子部分。能给我一些帮助吗?如果你给我看答案,你能解释为什么会是这个答案吗

for (int i = 0; i < strlen(text);i++)
{
    if (isspace(text[i]) != 0)
    {
       if(isalpha (text[i] + 1) != 0) 
       {
           words++;
       }
    }
}
然后以与循环计数单词类似的方式使用它



然后以与循环计数单词类似的方式使用它。

欢迎使用。你可以给我们看看你的代码。提示:如果你找到了一些字母,然后你发现了一些不是字母的东西,那么很可能你找到了一个单词的结尾,而下一个字母又开始了一个新单词。我想这个问题可能比堆栈溢出更合适,尽管编程上下文是因为高等数学这里需要的不仅仅是编程艺术。我也会让它更简单。非常感谢你帮助我学习如何改进我的问题和建议。我不会忘记的。事实上,作为一名程序员,学习如何寻求帮助是一项重要而非琐碎的技能:)欢迎来到SO。你可以给我们看看你的代码。提示:如果你找到了一些字母,然后你发现了一些不是字母的东西,那么很可能你找到了一个单词的结尾,而下一个字母又开始了一个新单词。我想这个问题可能比堆栈溢出更合适,尽管编程上下文是因为高等数学这里需要的不仅仅是编程艺术。我也会让它更简单。非常感谢你帮助我学习如何改进我的问题和建议。我不会忘记的。事实上,作为一名程序员,学习如何寻求帮助是一项重要而非琐碎的技能:)非常感谢!我测试了它,它的工作!只有一件事:你能在这些评论中解释为什么你的程序有效,而我的程序无效吗?我以后可能需要这些信息。非常感谢。@Lostincode拿起笔和纸,手工执行。你也可以在循环中插入一个print语句,在每次迭代中查看所有变量的值。而且,我不明白句子是如何工作的。我应该添加一个名为句子的int,然后执行:'int isdelim(char c){return c='.|c='!'| c='?';句子+++}'。顺便问一下,如何在注释中添加新行?每次我试着按ENTER键时,它只是发布评论。你必须自己找出完整的句子。要求某人提供一个完整的解决方案和复制一个解决方案一样是欺骗,只是对每个人都不那么有效;)谢谢!我测试了它,它的工作!只有一件事:你能在这些评论中解释为什么你的程序有效,而我的程序无效吗?我以后可能需要这些信息。非常感谢。@Lostincode拿起笔和纸,手工执行。你也可以在循环中插入一个print语句,在每次迭代中查看所有变量的值。而且,我不明白句子是如何工作的。我应该添加一个名为句子的int,然后执行:'int isdelim(char c){return c='.|c='!'| c='?';句子+++}'。顺便问一下,如何在注释中添加新行?每次我试着按ENTER键时,它只是发布评论。你必须自己找出完整的句子。要求某人提供一个完整的解决方案和复制一个解决方案一样是欺骗,只是对每个人都不那么有效;)
bool reading_word = false; // Flag
int words = 0;

for(int i=0; i<strlen(text); i++) {
    if(isspace(text[i]) {
        reading_word = false;
    }
    else if(isalpha(text[i])) {
        if(!reading_word) {
            reading_word = true;
            words++;
        }
    }
}
int isdelim(char c)
{
    return c == '.' || c == '!' || c == '?';
}