C言語統計単語数
1つのプログラムを書いて、1つの単語(大文字と小文字を区別しない)が文章に現れる回数を統計します(単語は1つの英語の単語を指し、すべて小文字の英語のアルファベットで構成されています.単語の前後は記号文字または空の文字でなければなりません).
入力:
最初の行はいくつかの文で、文章を表しています.(文章の長さは10000文字を超えない).
2行目は、クエリの単語数を表すN(1≦N≦1062)の数字です.
以下の行ごとに1つの単語(単語は小文字の英字で構成され、長さは20を超えない).
出力:
各テストデータのセットは、この単語が文章に現れる回数を表す行を出力します.
例入力:
David:hello,lily. Lily:oh,david!hello,how are you?
4
hello
day
ello
david
例出力:
2
0
0
2
入力:
最初の行はいくつかの文で、文章を表しています.(文章の長さは10000文字を超えない).
2行目は、クエリの単語数を表すN(1≦N≦1062)の数字です.
以下の行ごとに1つの単語(単語は小文字の英字で構成され、長さは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:
");
gets(szContent);
int totalNum = GetWords(szContent, szWord);
printf("please input word count:
");
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("-----------------
");
for (i=0; i<inputCount; i++)
{
printf("%d
", pCount[i]);
}
free(pCount);
return 0;
}