#include<stdio.h>
#include<math.h>
#include<string.h>
struct words
{
int n;
char c[30];
}w[10000];
int main
{
FILE *fp;
char b[30],ch;
int i=0,m=1,j=0,k=0,t=0,flag=0;
fp=fopen("case1.in","r");
while((ch=fgetc(fp))!=EOF)
{
if('A'<=ch&&ch<='Z') ch=ch+32;
if('a'<=ch && ch<='z')
{b[i]=ch;i++;flag=1;}
else
{
if(ch=='-'&&(ch=fgetc(fp))=='\n')
{
flag=0;
}
else
{
if(flag==1)
{ b[i]='\0';i=0;flag=0;m=0;
for(j=0;j<k;j++)
{
if(strcmp(b,w[j].c)==0)
{m=1;break;}
}
if(m) w[j].n++;
else
{w[k].n=1;strcpy(w[k].c,b);k++;}
}
}
if('A'<=ch && ch<='Z') ch+=32;
if('a'<=ch && ch<='z')
{b[i]=ch;i++;flag=1;}
}
}
for(i=0;i<k&&i<5;i++)
{
t=0;
while(w[t].n==0) t++;
for(j=1;j<k;j++)
{
if(w[j].n>w[t].n) t=j;
else
if(w[j].n==w[t].n)
{
if(strcmp(w[j].c,w[t].c)<0)
t=j;
}
}
printf("%s %d\n",w[t].c,w[t].n);
w[t].n=0;
}
}
C语言 统计文件中单词出现次数,输出次数最多的前5个单词及次数。我有程序但看不懂,希望帮忙解析,代码:
答案:1 悬赏:80 手机版
解决时间 2021-03-08 14:11
- 提问者网友:你给我的爱
- 2021-03-07 14:34
最佳答案
- 五星知识达人网友:渡鹤影
- 2021-03-07 14:59
#include<stdio.h>
#include<math.h>
#include<string.h>
struct words
{
int n;
char c[30];
}w[10000];
int main()
{
FILE *fp;
char b[30], ch;
int i = 0, m = 1, j = 0, k = 0, t = 0, flag = 0;
fp = fopen("aaa.txt", "r");
while ((ch = fgetc(fp)) != EOF)
{
if ('A' <= ch&&ch <= 'Z') ch = ch + 32;//转小写
if ('a' <= ch && ch <= 'z') //字母
{
b[i] = ch; i++; flag = 1;//开始写入b
}
else
{
if (ch == '-' && (ch = fgetc(fp)) == '\n')//非字母 非空格
{
flag = 0;
}
else
{
if (flag == 1) //空格
{
b[i] = '\0'; i = 0; flag = 0; m = 0;//写入b完成+'\0'
for (j = 0; j < k; j++)
{
if (strcmp(b, w[j].c) == 0)
{
m = 1;//标志 前有单词相同
break;
}
}
if (m) w[j].n++;//数量加1
else //存入结构体
{
w[k].n = 1; strcpy(w[k].c, b); k++;
}
}
}
}
}
for (i = 0; i < k&&i < 5; i++)
{
t = 0;
while (w[t].n == 0) t++;
for (j = 1; j<k; j++)
{
if (w[j].n>w[t].n) t = j;//选 大的
else
if (w[j].n == w[t].n)
{
if (strcmp(w[j].c, w[t].c) < 0)
t = j;
}
}
printf("%s %d\n", w[t].c, w[t].n);
w[t].n = 0;//t 已输出,令n=0;
}
}
#include<math.h>
#include<string.h>
struct words
{
int n;
char c[30];
}w[10000];
int main()
{
FILE *fp;
char b[30], ch;
int i = 0, m = 1, j = 0, k = 0, t = 0, flag = 0;
fp = fopen("aaa.txt", "r");
while ((ch = fgetc(fp)) != EOF)
{
if ('A' <= ch&&ch <= 'Z') ch = ch + 32;//转小写
if ('a' <= ch && ch <= 'z') //字母
{
b[i] = ch; i++; flag = 1;//开始写入b
}
else
{
if (ch == '-' && (ch = fgetc(fp)) == '\n')//非字母 非空格
{
flag = 0;
}
else
{
if (flag == 1) //空格
{
b[i] = '\0'; i = 0; flag = 0; m = 0;//写入b完成+'\0'
for (j = 0; j < k; j++)
{
if (strcmp(b, w[j].c) == 0)
{
m = 1;//标志 前有单词相同
break;
}
}
if (m) w[j].n++;//数量加1
else //存入结构体
{
w[k].n = 1; strcpy(w[k].c, b); k++;
}
}
}
}
}
for (i = 0; i < k&&i < 5; i++)
{
t = 0;
while (w[t].n == 0) t++;
for (j = 1; j<k; j++)
{
if (w[j].n>w[t].n) t = j;//选 大的
else
if (w[j].n == w[t].n)
{
if (strcmp(w[j].c, w[t].c) < 0)
t = j;
}
}
printf("%s %d\n", w[t].c, w[t].n);
w[t].n = 0;//t 已输出,令n=0;
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯