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

计算每个单词在给定的句子中出现的次数

佴保臣
2023-03-14

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

red 1 
green 2 
blue 2 
blue 
1

我的代码:

#include <stdio.h>
#include <string.h>

int main(void)
{
    int count = 0, c = 0, i, j = 0, k, space = 0;
    char str[1000], p[500][1000], str1[200], ptr1[500][1000];
    char *ptr;
    fgets(str, sizeof(str), stdin);
    for (i = 0;i<strlen(str);i++)
    {
        if ((str[i] == ' ')||(str[i] == ', ')||(str[i] == '.'))
        {
            space++;
        }
    }
    for (i = 0, j = 0, k = 0;j < strlen(str);j++)
    {
        if ((str[j] == ' ')||(str[j] == 44)||(str[j] == 46))  
        {    
            p[i][k] = '\0';
            i++;
            k = 0;
        }        
        else
             p[i][k++] = str[j];
    }
    k = 0;
    for (i = 0;i <= space;i++)
    {
        for (j = 0;j <= space;j++)
        {
            if (i == j)
            {
                strcpy(ptr1[k], p[i]);
                k++;
                count++;
                break;
            }
            else
            {
                if (strcmp(ptr1[j], p[i]) != 0)
                    continue;
                else
                    break;
            }
        }
    }
    for (i = 0;i < count;i++) 
    {
        for (j = 0;j <= space;j++)
        {
            if (strcmp(ptr1[i], p[j]) == 0)
                c++;
        }
        printf("%s %d\n", ptr1[i], c);
        c = 0;
    }
    return 0;
}

共有2个答案

顾学真
2023-03-14
#define MAXWORD 100
#define MAXSTRING 10000

void WordCount()
{
    /*Decalaration */
    char *wordArray[MAXWORD] = { 0 };
    int count[MAXWORD] = {0};
    char inputString[MAXSTRING];
    int wordCount=0;
    /*Reading data from input stream*/
    fgets(inputString, sizeof(inputString), stdin);
    /*Remove trailing new line char*/
    inputString[strlen(inputString) -1] = 0;

    /*Init string tokenizer*/
    char *wordPointer = strtok(inputString, " ");
    while (wordPointer)
    {
        int len = strlen(wordPointer);
        int found = 0;
        for (int i = 0; i < wordCount; i++)
        {
            /*check if word already processed then incrment word count*/
            if (strncmp(wordArray[i], wordPointer, len)==0)
            {
                count[i]++;
                found = 1;
                break;
            }

        }
        if (!found)
        {
            /*Allocate memory for string and copy for future comparision*/
            wordArray[wordCount] = (char*)malloc(len + 1);
            strncpy(wordArray[wordCount], wordPointer, len);
            wordArray[wordCount][len] = 0;
            count[wordCount]++;
            wordCount++;
        }
        wordPointer = strtok(NULL, " ");
    }

    /* print words and their frequency*/
    for (int i = 0; i < wordCount; i++)
    {
        printf("%s - %d \n", wordArray[i], count[i]);
    }
}
魏澄邈
2023-03-14

< code>fgets将换行符(< code>\n)追加到< code>str中

因此,您的 str 将包含

str="红色绿色蓝色蓝色绿色蓝色\n"

因此,< code>blue与< code>blue\n不匹配,并将< code>blue\n计为不同的单词。

你的输出也完全一样

red 1 
green 2 
blue 2 
blue          //see 1 is printed on next line
1

因此修剪\n如下所示。

size_t len = strlen(str);
if (len > 0 && str[len - 1] == '\n')
    str[len - 1] = '\0';
 类似资料:
  • 问题内容: 如果我有英文文章或英文小说,并且想计算每个单词出现多少次,用Java编写的最快算法是什么? 有人说您可以使用Map ()完成此操作,但我想知道如何知道关键字是什么?每篇文章都有不同的词,您如何知道“关键”词,然后在其数量上加上一个? 问题答案: 这个数字“我是”只是一个字

  • 我有一个散列表,句子记录用一个相关的键存储在其中。现在,应该创建一个输出,显示单词(在我的例子中是单词“car”)在这个索引(key)中出现的次数。例如,如果单词“car”在索引(key)中出现5、4次,则5也应该输出4次。 当前输出为: 汽车 : [1, 2, 3, 5] 我想要的输出是:Car : [1,1,2,3,3,5,5,5,5] 我想我必须添加一个额外的 if 循环,但我不知道我的程序

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

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

  • 问题内容: 我有一个重复条目的单词。 我想计算并保存数据结构中每个单词的出现次数。 我该怎么做? 问题答案: 如果您没有大量的字符串,最短的实现方法是使用方法,如下所示: 输出:

  • 我有一个文本文件,其中的文字是语音标记的一部分。文件可以在这里看到。因此,每个单词及其标记都在一行中。句子由标记空间划分。我正在尝试创建一个程序,1)查找频率高于1的单词,包括句子级别的标记名词、动词、ADJ和ADV 2)打印找到的频率总和。我创建的程序错误地计算了频率,因为它在前面的句子中添加了相同单词的频率。这不是我想要的。我想计算每个句子中项目(单词和标记)的频率,而不累积之前句子的频率。有