编写一个函数在终端中用 ./a.out
My
name
is
iKun
And
my
favorite
sport
is
basketball
and
if
you
love
me
you
should
become
IKUN
统计一共有多少个不同的单词(大小写算不同的单词)
同时统计出现频率最多的单词是多少次,并且打印出这个单词(如果有多组,那么都打印出来)
#include <stdio.h>
#include <string.h>
#define MAX_WORD_LENGTH 60
#define MAX_WORD_NUM 200
char words[MAX_WORD_NUM][MAX_WORD_LENGTH] = {0};
int count[MAX_WORD_NUM] = {0};
int main() {
int n = 0, max = 0;
char word[MAX_WORD_LENGTH];
while (scanf("%s", word) == 1) {
int i = 0;
while (i < n && strcmp(words[i], word) != 0)
i++;
if (i == n) {
strcpy(words[i], word);
n++;
}
count[i]++;
if (count[i] > max)
max = count[i];
}
printf("Total number of different words: %d\n", n);
printf("Max Freq: %d\n", max);
for (int i = 0; i < n; i++) {
if (count[i] == max)
printf("%s\n", words[i]);
}
return 0;
}
$ gcc -Wall main.c
$ ./a.out < data.txt
Total number of different words: 17
Max Freq: 2
is
you
#include<stdio.h>
#include<ctype.h>
#include<string.h>
typedef struct Word{
char s[20];
int num;
} Word; //s存储一个单词,num表示单词个数("单词表成员")
int main()
{
char ch;
int wordStart=0,numberofword=0,max=0; //numberofword单词总数
Word word[200]; //可以存储不同单词以及其个数的"单词表"
int i=0,j=0,k,m=0;
char copy[20]=""; //暂存读取的一个完整单词
FILE *fp1=NULL;
FILE *fp2=NULL;
fp1=fopen("data.txt","r"); //只读方式打开文件
for (j = 0; j < 200; j++)
{
word[j].num=0; //把结构体数组成员的num全部赋值为0
}
while(!feof(fp1)) //循环读取直到文件末尾
{
ch =fgetc(fp1);
if( isalpha(ch)) //单词开始
{
wordStart = 1; //标记
copy[i++]=ch; //把一个完整单词每个字符依次存进copy
}
else if( !isalpha(ch) && wordStart==1 ) //判断一个单词结束
{
numberofword++; //单词总个数+1
wordStart = 0;
i=0;
for(j=0;j<(m+1);j++)
{
if(!strcmp(word[j].s,copy))
{
k=0; //标志前面出现过
word[j].num++; //相同单词计数+1
break;
}
else
k=1;
}
if(k==1) //标志未出现过的新单词
{
for(j=0;j<20;j++) //将新单词加如"单词表"
{
word[m].s[j]=copy[j];
}
word[m].num++;
m++; //单词表成员个数+1,同时也是下一成员的下标。
}
for (j = 0; j < 20; j++) //一个单词结束,copy清空
{
copy[j]=NULL;
}
}
}
for (j = 0; j < m; j++)
{
if(word[j].num>max)
max=word[j].num;
}
printf("不同的单词个数:%d\n",m);
printf("最多单词个数:%d\n",max);
for (j = 0; j < m; j++)
{
if(max==word[j].num)
puts(word[j].s);
}
return 0;
}