c语言题目,求解答!

描述

对于给定的N个全部是由小写英文字母组成的单词,按字典顺序输出每个单词出现的次数。

输入

只有一组数据,第一行是一个整数n(0<n<100)
接下来是n行,每行一个单词,单词全部由英文小写字母组成,每个不到20个字母。

输出

按字典顺序输出每个单词的出现次数,每个单词只输出一次。输出格式为:每行一个单词,一个整数的出现次数,单词与次数之间保留一个空格。

样例输入
7
man
manual
abc
man
def
abcdef
man

样例输出
abc 1
abcdef 1
def 1
man 3
manual 1

题目来源
BISTU

# include<stdio.h>
# include<string.h>
# define LENG 50
void main()
{
int n,i,j,flag=0,k=0,temp_num,num[LENG]={0};
char ch,mystring[LENG][30],exist_string[LENG][30],temp[30];
while((scanf("%d",&n))!=1)
{
printf("请输入数字:");
while((ch=getchar())!='\n')
{
continue;
}
}
getchar();
for(i=0;i<n;i++)
{
gets(mystring[i]);
}
for(i=0;i<n;i++)
{
for(j=0;j<k;j++)
{
if(strcmp(mystring[i],exist_string[j])==0)
{
flag=1;
num[j]+=1;
}
}
if(!flag)
{
strcpy(exist_string[k],mystring[i]);
num[k]+=1;
k++;
}
flag=0;
}
for(i=0;i<k;i++)
{
for(j=0;j<k;j++)
{
if(strcmp(exist_string[j],exist_string[j+1])>0)
{
strcpy(temp,exist_string[j]);temp_num=num[j];
strcpy(exist_string[j],exist_string[j+1]);
strcpy(exist_string[j+1],temp);
temp_num=num[j];
num[j]=num[j+1];
num[j+1]=temp_num;
}
}
}
puts("输出如下:");
for(i=0;i<k;i++)
{
printf("%s %d\n",exist_string[i],num[i]);
}
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-20
用string.h的strcmp
先对输入的单词进行排序,后再判断罗,贴上我的代码
#include<stdio.h>
#include<string.h>
int main()
{
char a[101][21],b[21];
int i,n,j;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%s",a[i]);
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{
if(strcmp(a[i],a[j])>0)
{
strcpy(b,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],b);
}
}
//for(i=0;i<n;i++)
// printf("%s\n",a[i]);
for(i=0;i<n;i++)
{
int count=0;
for(j=i;j<n;j++)
{
count++;
if(strcmp(a[i],a[j])<0)
{
printf("%s %d\n",a[i],count-1);
i=j-1;
break;
}
}
}
}return 0;
}本回答被网友采纳
第2个回答  2013-05-20
用一个链表保存每个互异的单词和出现的次数(每个节点是结构体),c的话注意单词结尾的空字符.每读进一个单词,遍历链表,找到合适的位置(要么已存在,要么添加一个节点),最后遍历输出,可以了,反正数字小追问

不太明白,能写出来吗?能不用链表吗?

追答

数组也可以,用二维数组先保存每个互异的单词,另一个数组保存单词出现次数,下标对应,最后排序单词

第3个回答  2013-05-21
凑个热闹,学习一下
相似回答