写一个程序统计一个单词(不区分大小写)在文章中出现的次数(单词指一个英文单词,全部由小写英文字母组成。单词的前后必须是符号字符或空字符)。
输入:
第一行是一些句子,表示一篇文章。(文章的长度不超过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
输入:
第一行是一些句子,表示一篇文章。(文章的长度不超过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;
}