当前位置: 首页 > 知识库问答 >
问题:

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

元阳荣
2023-03-14

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

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

这些不是完整的说明,只是我有问题的部分。

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

#include<stdio.h>
#include<cs50.h>
#include<string.h>
#include<stdbool.h>
#include<ctype.h>


int main (void)
{
    int letters = 0;
    string text = get_string("Text: ");
    int words = 0;

    for (int i = 0; i < strlen(text);i++)
    {
        if(isalpha(text[i]) != 0)
        {
        letters++;
        }
    }
    printf("Letters: %i\n", letters);
    


   for (int i = 0; i < strlen(text);i++)
   {
       if (isspace(text[i]) != 0)
       {
          if(isalpha (text[i] + 1) != 0) 
          {
              words++;
          }
       }
 
   }
   
   printf("Words: %i\n", words);
}

此代码计算正确的字母数,但始终键入单词:0。我还没有完成句子部分。能给我一些帮助吗?如果你给我看答案,你能解释为什么会是这个答案吗?

共有1个答案

谷泽宇
2023-03-14
for (int i = 0; i < strlen(text);i++)
{
    if (isspace(text[i]) != 0)
    {
       if(isalpha (text[i] + 1) != 0) 
       {
           words++;
       }
    }
}

这里有一些错误的东西。你需要做的是意识到这个程序可以处于两种状态之一。要么你正在读一个单词,要么没有。

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

另外,不要写if(isspace(text[i])!=0)。它返回一个布尔值,所以它基本上是用来读取“如果文本[i]是一个空格”,所以只要写if(isspace(文本[i]))

另外,在您的代码中,isalpha(text[i]1)是完全错误的,没有任何意义。既然这是家庭作业,我就让你来找出原因。

对于句子,你可以使用这样的函数:

int isdelim(char c)
{
    return c == '.' || c == '!' || c == '?';
}

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

 类似资料:
  • 我一直在试图弄清楚如何计算句子每个单词中的元音和字符。例如 在句子 < code>hello : 5个字符,2个元音 <代码>有:5个字符,2个元音 。我见过完整句子做同样事情的代码。但不是一个字一个字地。 下面是我一直在做的编码 输入将全部。我很难弄清楚这一点。 在运行代码时,我没有得到元音计数。我能把句子分开。但元音计数没有发生。

  • 问题内容: 我正在编写一个非常基本的Java程序,该程序可以计算句子中每个单词的频率,到目前为止,我设法做到了这一点 我已经提取了每个字符串并将其存储在数组中,现在的问题实际上是如何计算每个“单词”重复出现的次数以及如何显示以使重复的单词不会多次显示,您能帮我这个忙吗?一个? 问题答案: 使用以单词为键的地图并将其计为值,像这样 如果不允许使用java.util,则可以使用一些排序算法对arr进行

  • 给定一个句子,我希望能够数出每个单词中有多少个元音。 示例输入: 示例输出: 我最初的想法是有2个同时循环。第一个循环直到满足EOF以结束程序,第二个(嵌套的)同时循环将运行直到满足空格 (" ") ,同时还对当前单词中的元音求和。一旦遇到空格,它将打印出元音的当前值,第二个同时循环将结束并重新开始(元音计数器重置回0)。 这是我为此编写的代码: 然而,这导致语法错误,我不能找出我的错误。 第6行

  • 我想计算一下给定句子中出现了多少个单词。我使用的是C编程语言。它不能计算最后一个字。在给定的字符串中,它计算每个单词发生的次数。如果有像这样的句子,那么程序应该算。但在我的情况下,它不算作。而不是计算,然后: 我的代码:

  • 问题内容: 我想使用方法来计算一个句子中的单词数。我写了这段代码,但我不太确定为什么它不起作用。无论我写什么,我都只会收到一个单词的数。如果您能告诉我如何修正我写的内容,而不是给我一个完全不同的主意,那就更好了: 问题答案: 您需要阅读整行。代替使用。

  • 我想计算一个句子中重复单词或重复单词的总数。这里我可以打印单词,但不能计算这些单词。 我期望输出:- 给定字符串中的重复单词:大黑色 给定字符串中的重复单词总数:2 输出如下: 给定字符串中的重复单词:大黑色 给定字符串中的重复单词总数:10 总计数显示为10,而不是2。