单词统计: 要求 (1)输入任意一段英文 (2)根据1中输入的各个单词出现的概率的高低输出前五个单词 (3)具有输入和输出界面
程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 20 //单词长度上限
void insert(char **s,int *a,char c[],int n){ //把一个单词c插入字符串数组s
int i;
for(i=0;i<n;i++){
if(strcmp(s[i],"")==0){ //如果这个单词没有出现过
strcpy(s[i],c); //把单词复制到一个空白区域
a[i]++; //此单词的计数加1
break;
}
else if(strcmp(s[i],c)==0){ //如果这个单词出现过
a[i]++; //此单词的计数加1
break;
}
}
}
void output(char **s,int *a,int n){ //输出出现频率最高的5个
int i,j,max;
for(i=0;a[i]!=0&&i<5;i++){
max=0;
for(j=0;j<n&&a[j]!=0;j++)
if(a[j]>a[max]) max=j;
printf("%s ",s[max]);
a[max]=-1;
}
printf("\n");
}
int main(){
char **s;
char temp[M];
int *a;
int i,n;
printf("请输入你打算输入单词的个数: ");
scanf("%d",&n);
s=(char **)calloc(n,sizeof(char *));
for(i=0;i<n;i++)
s[i]=(char *)calloc(M,sizeof(char)); //动态分配字符串数组的空间
a=(int *)calloc(n,sizeof(int)); //分配计数数组的空间
for(i=0;i<n;i++){ //初始化两个数组
strcpy(s[i],"");
a[i]=0;
}
printf("输入你要输入的单词:\n"); //输入单词
for(i=0;i<n;i++){
scanf("%s",temp);
insert(s,a,temp,n);
}
printf("频率最高的5个单词:\n"); //输出
output(s,a,n);
for(i=0;i<n;i++)
free(s[i]);
free(s);
free(a);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 20 //单词长度上限
void insert(char **s,int *a,char c[],int n){ //把一个单词c插入字符串数组s
int i;
for(i=0;i<n;i++)
{
if(strcmp(s[i],"")==0){ //如果这个单词没有出现过
strcpy(s[i],c); //把单词复制到一个空白区域
a[i]++; //此单词的计数加1
break;
}else if(strcmp(s[i],c)==0){ //如果这个单词出现过
a[i]++; //此单词的计数加1
break;
}
}
}
void output(char **s,int *a,int n){ //输出出现频率最高的5个
int i,j,max;
for(i=0;a[i]!=0&&i<5;i++){//由于不重复的单词数量可能小于5,所以用a[i]!=0控制循环
max=0;
for(j=0;j<n&&a[j]!=0;j++) if(a[j]>a[max]) max=j;//选取当前最大的计数对应的数组标号
printf("%s ",s[max]);//输出最大计数的单词
a[max]=-1;//使该最大计数单词的数量为-1(最小)
}//继续找下一个最大计数的单词
printf("\n");
}
int main(){
char **s;
char temp[M];
int *a;
int i,n;//n放着要输入的单词个数
printf("请输入你打算输入单词的个数: ");
scanf("%d",&n);
s=(char **)calloc(n,sizeof(char *));//为具有n个长度为(char *)元素的数组分配内存
for(i=0;i<n;i++)
s[i]=(char *)calloc(M,sizeof(char)); //动态分配字符串数组的空间
//对于每一个s[i]指针,为具有M个长度为(char)元素的数组分配内存
a=(int *)calloc(n,sizeof(int)); //分配计数数组的空间
//为具有n个长度为(int)元素的数组分配内存
for(i=0;i<n;i++)
{ //初始化两个数组
strcpy(s[i],"");
a[i]=0;
}
printf("输入你要输入的单词:\n"); //输入单词
for(i=0;i<n;i++)
{
scanf("%s",temp);
insert(s,a,temp,n);
}
printf("频率最高的5个单词:\n"); //输出
output(s,a,n);
for(i=0;i<n;i++) free(s[i]);//以下代码用来释放分配的三个数组空间
free(s);
free(a);
return 0;
}