C语言:从一个文件中读取英语单词,统计单词个数和每个单词出现的频率 代码哪里有问题,求大神帮忙修改下

代码如下:#include<stdio.h>#include<stdlib.h>#include<string.h>#defineM100#defineN20charte... 代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 100
#define N 20
char temp[100];
char str[M][N]; //单词字串结果存放数组
int strcount[M]; //单词字串计数数组.对应每个单词串,拥有一个计算器
int i=0,j=0,k=0,t=0,x=0;
void main()
{
FILE *fp;
int count=0;
if((fp=fopen("data.txt","r"))==NULL)
{
printf("无法打开该文件!\n");
exit(0);
}
while(fscanf(fp,"%s",temp)!=EOF)//EOF即为到了文件末尾
{
printf("%-16s",temp);
count++;
}
printf("\n");
printf("The number of word is:%d\n",count);

t=strlen(temp)+1; //计算该行中总字符数,最后加1是因为字符串要以‘\0’结尾
while(j<t)
{
for(;temp[j]==32;j++); //如果串中是空格,则拼命跳过,不计
while(k<N&&temp[j]!=32) //不是空格,且没有超出题目中的要求:
//每个字串长度小于20.如果大于20,自动截除.
//必要时可以调整N的值来重定义长大
str[i][k++]=temp[j++]; //将输入行字串分割存放到结果数组中
str[i][k]='\0'; //如果该串原来大于20,会被自动截除
strcount[i]=1; //计数
for(x=0;x<i;x++) //与前面的串比较
if(strncmp(str[i],str[x],N)==0)
//调用库函数,不分大小写与前面的串相比,相同则返回0.
{
strcount[x]++; //相同,计数器数组增加
i--; //该串为重复串,总串数不增加
break; //跳出for循环
}
i++; //无重复串,则总字串数增加
k=0;
}
printf("结果:\n");
t=0;
for(;t<i;t++)//不超出总串数
printf("%s,%d\n",str[t],strcount[t]);
}
而且单词还要按字典顺序输出
展开
 我来答
风若远去何人留
2015-04-17 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450134
专业C/C++软件开发

向TA提问 私信TA
展开全部
while(fscanf(fp,"%s",temp)!=EOF)//EOF即为到了文件末尾
{
printf("%-16s",temp);
count++;
}

这部分 只是读入了单词并统计了总数 实际上存在temp里面的之后最后一个 之前的都被覆盖了

下面的所有处理 都是针对最后一个单词以及一个空的str做的 本质上没什么意义


两种做法

1, 读取单词 并顺序存在str中,存好后排序,然后统计各自的次数

2 每次读取单词 与已经存在str中的逐一对比,按字典序插入,如果已经存在 则对应计数加一


推荐用第二种 更简单一点

帐号已注销
2015-04-17 · TA获得超过2695个赞
知道大有可为答主
回答量:2808
采纳率:50%
帮助的人:1968万
展开全部
能不能把文件的读取先去掉再看,这样看着方便的多
追问
本来是没有的 这是我加上的  因为作业要求必须是从文件读取
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fastfs
2015-04-16 · TA获得超过1423个赞
知道大有可为答主
回答量:2659
采纳率:62%
帮助的人:810万
展开全部
问你个问题,data.txt你是放在哪个路径里的。
追问
放在程序所在的文件夹里面 在里面新建的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式