代码如下#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main()
{
FILE * fp;
char s[10000][21]={'\0'};
int count[10000]={0};
char s2[10000][21]={'\0'};
char ch;
int i=0,j=0,flag=0,m=0,n=0,word=0,max,k=1; //flag (1)遇到不是单词 (0) 遇到单词或单词未结束;word 0 不重复 1重复;
if((fp=fopen("case1.in","r"))==NULL ) //打开文件
{printf("wrong");return 1;} //打开不了就输出 wrong
while((ch=fgetc(fp))!=EOF)
{
if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')||ch=='-'||ch=='\'') //遇到 字母, '-' , 缩写号 ' 时
{ if(flag==1) //判断flag直到遇到单词 i自增使指向下一个数组
i++;
if(ch>='A'&&ch<='Z') //大写换小写
{
ch=ch+32;
}
s[i][j]=ch;
j++;
flag=0; //单词未结束flag为0
}
else
{
flag=1; //遇到不是单词,标记为1
}
}
strcpy(s2[0],s[0]); //将s[0]复制到s2[0]中
for (m=1;m<=i;m++) //从s[1]开始 直到 s[i]
{
for(n=0;n<m;n++) //将s[m]跟他前面的比较.看看是否重复
{
if(strcmp(s[m],s[n])==0)
{
word=1;//重复 word标记为1
}
}
if(word==0) //不重复,将s[m]复制到s2[k]中
{
strcpy(s2[k],s[m]);
k++;
}
word=0;//比较完后将word重置
}
for(m=0;m<k;m++)
{
for(n=0;n<=i;n++)
{
if(strcmp(s2[m],s[n])==0)//s2[m]中的单词是不重复的.用s[n]里面的单词逐个对比.遇到相同count[m]自+1;
count[m]=count[m]+1;
}
}
for(m=0;m<=k&&m<5;m++) //单词数小于5个或k(k<5时)个执行循环
{
max=0;//重置max
for(n=1;n<=i;n++)
{
if(count[max]==count[n]) //若单词出现次数相同 .按字典顺序排
{
if(strcmp(s2[max],s2[n])>0)
max=n;
}
if(count[max]<count[n])
max=n;
}
printf("%s %d\n",s2[max],count[max]);
count[max]=0;//将输出过的单词出现次数清0;
}
return 0;
}
正常的结果是
i 10
and 4
my 4
but 3
in 3
但是我运行时.结果是
77
adminton 1
and 1
at 1
breakfast 1
之前用结构体数组还是可以做出来的.现在不知道为什么不行..?
求解..还有.我是c语言初学者.请讲得简单易懂一点..
还有我觉得我得程序好像有些多余的地方.请问如何精简?
初始化不对?可以说具体点吗..真正的新手..学没2个月
追答int count[10000]={0};这个只表示count[0]=0
追问啊?是吗?哪我知道了..谢谢
发了..请帮忙检查检查
追答这段程序中
while((ch=fgetc(fp))!=EOF)
{
if((ch>='A'&&ch='a'&&ch='A'&&ch<='Z') //大写换小写
{
ch=ch+32;
}
s[i][j]=ch;
j++;
flag=0; //单词未结束flag为0
}
else
{
j=0;//修改之处
flag=1; //遇到不是单词,标记为1
}
}
有问题,当一个单词完了后,j没有等于0。
导致之后的数组存储数据出现问题
C语言 计算一篇英文文章中出现次数最多的前5个单词,按英文字典顺序输出...
if ((fp=fopen("case1.in","r"))==NULL) \/\/打开文件 {printf("wrong");return 1;} \/\/打开不了就输出 wrong while(fgets(szText,sizeof(szText)-1,fp)) \/\/这里读整行,处理比较有效,不容易出错 { char *tmp=szText,*end=szText+strlen(szText);char *endChr;while (tmp...
C语言:输入6个英文单词,要求按从小到大排序,并输出。如下图所示:
printf("输出排好序的6个单词:\\n"); for(int i = 0; i < 6; i++ ) puts(string[i]); return 0; }没改什么,就是多次声明了变量i,有些编译器不允许这么做 本回答由提问者推荐 举报| 答案纠错 | 评论(5) 11 7 283802332 采纳率:78% 来自:芝麻团 擅长: C\/C++ 汇编语言 Linux 工程技术科...
c语言 输入10个单词,按字典顺序输出 不要复制不对的过来啊
printf("这10个单词按照字典排序输出为:\\n"); for(i=0;i<10;i++)\/\/ 输出 { printf("%s\\n",str[tem[i]]); }}很明显不再对字符串进行复制或交换了,速度快多了。 ycsxm | 发布于2013-04-21 举报| 评论(2) 9 0 为您推荐: c语言逆序输出数字 c语言中如何顺序输出 c语言程序的顺序 c...
pythona的序列是多少个
maxsplit是最大分割次数,如果maxsplit被省略,则表示不限制分割次数。 2.4统计英文文章中单词出现的频率python基础数据结构:序列、映射、集合 参考资料: Python中常见的数据结构可以统称为容器(container)。序列(如列表和元组)、映射(如字典)以及集合(set)是三类主要的容器。 一、序列(列表、元组和字符串) 序列中的每...
电脑的背单词软件背单词软件哪个好
5、e时代英语 一个免费的背单词软件,有循环记忆管理系统和课程编辑系统。除了软件本身携带的课程外,用户还可以自己制作课程。 一个小时测试结果: 总学:108 词, 生词:92 词 测验结果:81词\/小时 正确率: 32% 测评:这个软件的核心是模拟遗忘曲线对记忆进行管理,但模拟效果一般,对单银举词复习的次数计...
我现在已经是一个大二的学生了,我的单词一直过不了关,谁能教教该怎么...
背字典的时候,按开头字母(Z,Y,X,Q,J,K,U)(V,W,N,O,L)(FG,IT,HM,BDE,R)(C,P,S,A)的顺序背,其中C,P,S,A每个都要分三部分背。这样背有几个好处:(一)能增加成就感,提高兴趣。至于为什么,您翻翻字典就明白了。(二)便于清楚地知道那些单词已经背过,那些还没背。(三)能先把最基本的词先掌握...
有什么比较好的英语学习方法?本人记英语单词一下忘了,英语听力很差.
在听、说、读、写出现疑问时,就要赶紧查词典,这时,你至少要通过查词典,知道这个单词的基本汉语意思。重要单词要全面把握:做练习、精读、写作、听力时,手边放一本字典,如《牛津高阶英汉双解词典》,遇到不懂的、掌握的不确切单词中的重要单词,如常用的、常考的重要单词,要仔细查阅词典,这时,不光要看音标、注释,...