求大神们帮忙 啊!!!急急急急。。。。

huhanfeng2010 2011-11-15 10:53:21
写程序实现从键盘输入一个英文句子(句子长度不超过1000,单词之间用空格隔开),统计其中各单词出现的次数(单词不区分大小写,即Word和WORD视为一个单词),并按从大到小的顺序输出单词和其出现的次数,当单词出现的次数相等时,按照字典顺序输出(输出时请以单词的小写形式输出)。我的程序在运行时出现了好多问题,好像是结构体数组做形参方面的错误,这方面弄得不很懂 啊,帮忙看下啊
#include<stdio.h>
#include<string.h>
struct WORD
{char wordname[10];
int wordcount;
};

int statistics (char * source,struct WORD words[]);
void sortWords(struct WORD words[],int len);
void printWords(struct WORD words[],int len);
main(void){struct WORD words[200];
char sentence[2000];int len;
char * source=sentence;
printf("Please enter a sentence:\n");
gets(sentence);
len=statistics (source,WORD words[]);
sortWords(WORD words[200],len);
printWords(words[200],len);
return 0;
}
int statistics (char * source,struct WORD words[]){
char temp[10];
int len=1,i=0;
while(*source!='\0'){
if((*source>='a'&&*source<='z')||(*source>='A'&&*source<='A')){
temp[i]=*source;
i++;
}
else{temp[i]='\0';
for(int j=0;j<200;j++){
if(strcmpi(words[j],temp[i])==0)
words[j].wordcount++;
else{
words[i]=temp[i];
len++;}
i=0;}
source++;
}
return len;
}
void sortWords(struct WORD words[],int len){
int i,k;
struct WORD t;
for(i=0;i<len-1;i++){
k=i;
for(j=i+1;j<len;j++){
if(words[j].wordname[0]<words[k].wordname[0])
k=j;
t=words[k];
words[k]=words[i];
words[i]=t;}}
}

void printWords(struct WORD words[],int len)
{
int i;
printf("The result is as follows:\n");
for(i=0;i<len;i++)
printf("%s%d\n",words[i].wordname,words[i].wordcount);
}
...全文
103 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
huhanfeng2010 2011-11-16
  • 打赏
  • 举报
回复
太谢谢啦!!呵呵,貌似还有个小错误。*source!='\0'应该是*(source-1)!='\0',不然最后一个单词统计不出来。
-好名字- 2011-11-16
  • 打赏
  • 举报
回复
还有个小错误,如果什么也不输入,就会显示“1”.
-好名字- 2011-11-16
  • 打赏
  • 举报
回复
还有个小不足,如果什么也不输入,会显示 “1”。
無_1024 2011-11-15
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<string.h>
#include <ctype.h>
struct WORD
{
char wordname[10];
int wordcount;
};

int statistics (char * source,struct WORD words[]);
void sortWords(struct WORD words[],int len);
void printWords(struct WORD words[],int len);

int main(void)
{
struct WORD words[200];
char sentence[2000];
int len;
char * source=sentence;
printf("Please enter a sentence:\n");
gets(sentence);
len=statistics (source,words);
sortWords(words,len);
printWords(words,len);
return 0;
}

int statistics (char * source,struct WORD words[])
{
char temp[10];
int len=0,i=0;
while(*source!='\0')
{
if((*source>='a'&&*source<='z') || (*source>='A'&&*source<='Z') )//----
{
temp[i]=tolower(*source);//--
i++;
}
else
{
temp[i]='\0';
i = 0;
for(int j=0;j <= len;j++)
{
if( len == 0 )
{
strcpy(words[0].wordname,temp);
words[0].wordcount = 1;
len++;
break;
}
if( strcmp(words[j].wordname,temp)==0 )
{
words[j].wordcount++;
break;
}
else
{
if( j == len )
{
strcpy(words[j].wordname,temp);
words[j].wordcount = 1;
len++;
break;
}
}
}
}
source++;
}
return len;
}
void sortWords(struct WORD words[],int len)
{
int i,j;
struct WORD t;
for(i=0;i<len-1;i++)
{
for(j=i+1;j<len;j++)
{
if( words[i].wordcount < words[j].wordcount )
{
t=words[i];
words[i]=words[j];
words[j]=t;
}
else if( words[i].wordcount == words[j].wordcount )
{
if( strcmp(words[i].wordname, words[j].wordname) > 0 )
{
t=words[i];
words[i]=words[j];
words[j]=t;
}
}
}
}
}

void printWords(struct WORD words[],int len)
{
int i;
printf("The result is as follows:\n");
for(i=0;i<len;i++)
printf("%s %d\n",words[i].wordname,words[i].wordcount);
}

69,373

社区成员

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

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