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

标签 c word-count

我想计算给定句子中出现了多少个单词。我正在使用 C 编程语言。它不能算最后一个字。在给定的字符串中,它计算每个单词出现的次数。如果有像red green blue blue green blue这样的句子,那么程序应该计算red 2 green 2 and blue 3。但就我而言,它不算作 blue 3。而不是计数 blue 2 然后 blue 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;
}

最佳答案

fgets 将换行符 (\n) 附加到 str

因此你的 str 将包含

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

因此 blue 不匹配 blue\n 并且将 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';

关于计算每个单词在给定句子中出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53791004/

相关文章:

c - 在 #if 语句中使用宏时打印弃用警告

c - 尝试将指针索引到函数中的指针时出现段错误

c++ - 计算唯一单词的数量(此计数不区分大小写)

javascript - 如何使用javascript获取元素中的单词数?

java - 编译Hadoop示例程序时找不到主类

C 字数统计程序

c++ - IBM MQ 回调函数调用等待某些作业完成

c - ttys0 丢失/乱码数据,而 ttyusb0 则不会

c - scanf() 将换行符留在缓冲区中

sql - SQL Server 2008 中列中出现的所有单词的字数统计