新手急求帮忙!简单C语言程序!急求重谢!

D_CHRIS 2015-09-05 05:04:59
这是程序,运行后最后一堆0,不知道怎么改善,还有能不能不区分大小写统计词频,急求。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>


struct word
{
char name[30]; //单词
int time; //单词出现的次数
}W[1000];


int sum; //单词的总个数


void chuli(char s[])

{
int i,j;
int flag=0; //flag为零时没有重复的
for(i=0;i<=sum;i++)
{

if(strcmp(W[i].name,s)==0) //如果重复
{
W[i].time++;
flag=1;
sum++;
}
}

if(flag==0) //如果不重复
{
for(j=0;j<30;j++)
W[sum].name[j]=s[j];
W[sum].time++;
sum++;
}
}



void BubbleSort() /*冒泡*/
{
int i,j;
struct word a;
for(i=0;i<sum;i++)
{
for(j=i+1; j<sum; j++)
if(W[i].time < W[j].time)
{
a=W[j];
W[j]=W[i];
W[i]=a;
}
}
}




int main()

{
char ch,s[30];
int i,flag=0;
FILE *fp1, *fp2;


fp1=fopen("d://a.txt","r");
if(fp1==NULL)
{
printf("cannot find the file! \n");
exit(1);
}
sum=0;
ch='\0';
for(i=0;i<1000;i++)
W[i].time=0;

while(ch!=-1)
{
for(i=0;i<30;i++)
s[i]='\0';
ch=fgetc(fp1);
if(('A'<=ch&&ch<='Z')||(ch>='a'&&ch<='z')) /*是否为字母*/
{
for(i=0;;i++) //默认计算结果为真
{
s[i]=ch;
ch=fgetc(fp1);
if(('A'<=ch&&ch<='Z')||(ch>='a'&&ch<='z'))
continue;
else
break; /*不是则结束*/
}
chuli(s);
}
}

BubbleSort();
fp2=fopen("d://result2.txt","w");
if(fp2==NULL)
{
printf("cannot open the file! \n");
exit(1);
}

printf("finish\n");
fprintf(fp2,"该文章中的单词按词频从大到小排列依次为:\n");
for(i=0; i<sum; i++)
fprintf(fp2,"%s:%d\n",W[i].name,W[i].time); //将统计结果写入磁盘文件中

return 0;

}

...全文
76 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_adintr_com 2015-09-05
  • 打赏
  • 举报
回复
引用 2 楼 D_CHRIS 的回复:
[quote=引用 1 楼 www_adintr_com的回复:]

if(strcmp(W[i].name,s)==0)   //如果重复
       {             
            W[i].time++;    
            flag=1;    
            sum++;      
         }     
重复的 sum 就别 ++ 了吧
请问一下如果想要不分大小写单词统计词频,如何实现最小程度的改动?[/quote] strcmp 换成 stricmp
D_CHRIS 2015-09-05
  • 打赏
  • 举报
回复
引用 1 楼 www_adintr_com的回复:

if(strcmp(W[i].name,s)==0)   //如果重复
       {             
            W[i].time++;    
            flag=1;    
            sum++;      
         }     
重复的 sum 就别 ++ 了吧
请问一下如果想要不分大小写单词统计词频,如何实现最小程度的改动?
www_adintr_com 2015-09-05
  • 打赏
  • 举报
回复

if(strcmp(W[i].name,s)==0)   //如果重复
       {             
            W[i].time++;    
            flag=1;    
            sum++;      
         }     
重复的 sum 就别 ++ 了吧

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧