C语言 统计单词个数

写一个程序统计一个单词(不区分大小写)在文章中出现的次数(单词指一个英文单词,全部由小写英文字母组成。单词的前后必须是符号字符或空字符)。

输入:
第一行是一些句子,表示一篇文章。(文章的长度不超过10000个字符)。
第二行是一个数字N(1≤N≤1062),代表查询的单词的数目。
以下每行一个单词(单词由小写英文字母组成,长度不超过20)。
输出:
每组测试数据输出一行,表示这个单词在文章中出现的次数。
例子输入:
David:hello,lily. Lily:oh,david!hello,how are you?
4
hello
day
ello
david

例子输出:
2
0
0
2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_CONTENT 10000
#define MAX_WORD_LEN 20
#define MAX_WORD_COUNT 500

int GetWords(const char* szContent, char (*szWord)[MAX_WORD_LEN])
{
    int num = 0;
    if (szContent == NULL)
    {
        return num;
    }

    char *start = szContent;
    char *cur = NULL;
    while (*start)
    {
        int len = 0;
        cur = start;
        while (((*cur>='a' && *cur<='z') || (*cur>='A' && *cur<='Z')))
        {
            if (*cur>='A' && *cur<='Z')
            {
                *cur += 32;
            }
            cur++;
            len++;
        }

        if (len > 0)
        {
            memset(szWord[num], 0, MAX_WORD_LEN);
            memcpy(szWord[num], start, len);
            num++;
        }

        start += (len+1);
    }
    return num;
}

int GetWordCount(char (*szWord)[MAX_WORD_LEN], int num, char str[])
{
    int i;
    int count = 0;
    if (szWord==NULL || num<=0 || str==NULL)
    {
        return count;
    }

    for (i=0; i<num; i++)
    {
        if (strcmp(szWord[i], str) == 0)
        {
            count++;
        }
    }

    return count;
}
int main()
{
    int i;
    char szContent[MAX_CONTENT] = {0};
    char szWord[MAX_WORD_COUNT][MAX_WORD_LEN];

    printf("please input content:\n");
    gets(szContent);
    int totalNum = GetWords(szContent, szWord);

    printf("please input word count:\n");
    int inputCount = 0;
    char szTemp[MAX_WORD_LEN];
    scanf("%d", &inputCount);
    int *pCount = malloc(sizeof(int)*inputCount);
    for (i=0; i<inputCount; i++)
    {
        memset(szTemp, 0, MAX_WORD_LEN);
        scanf("%s", szTemp);
        pCount[i] = GetWordCount(szWord, totalNum, szTemp);
    }

    printf("-----------------\n");
    for (i=0; i<inputCount; i++)
    {
        printf("%d\n", pCount[i]);
    }

    free(pCount);

    return 0;
}


  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值