R7-6 将句子中的单词按照出现的次数多少排序输出 (8 分)
输入1行由任意个英文单词组成的句子(句子中字符数不超过200),英文单词只包含字母,句子中单词之间可以用任何非字母字符进行分隔。
编程实现:根据给定的句子,按单词出现的次数按照从大到小输出单词及其出现次数,输出采用一个单词一行,若出现次数一样则按英文单词的字典顺序从小到大输出。
输入格式:
输入1行由多个单词组成的字符串,以回车结束。
输出格式:
按单词出现次数,从大到小输出对应单词和其出现次数(单词与次数之间空一格),一个单词一行。若有不同单词的出现次数一样,则按英文单词的字典顺序从小到大输出。
输入样例1:
Chengdu is Liyang's hometown.
输出样例1:
Chengdu 1
Liyang 1
hometown 1
is 1
s 1
输入样例2:
I'm a good student,Tom is a good student too!
输出样例2:
a 2
good 2
student 2
I 1
Tom 1
is 1
m 1
too 1
#include<stdio.h>
#include<string.h>
int main()
{
char c[201],s[1000][1000],a[1000];
gets(c);
int i,p[1000],j,z1,z2,f,t;
for(i=0;i<1000;i++)
p[i]=1;
f=0;
z1=-1;
for(i=0;c[i]!='\0';i++)
{
if(!(c[i]>='a'&&c[i]<='z'||c[i]>='A'&&c[i]<='Z'))
{
f=0;
if(c[i+1]=='\0')
{ s[z1][z2]='\0';
z1++;
}
}
else
{
if(f==0)
{
f=1;
if(z1!=-1)
{ s[z1][z2]='\0';
f=1;
for(j=0;j<z1;j++)
{
if(strcmp(s[j],s[z1])==0)
{
p[j]++;
z1--;
}
}
}
z1++;
z2=0;
}
s[z1][z2]=c[i];
z2++;
if(c[i+1]=='\0')
{ s[z1][z2]='\0';
z1++;
}
}
}
for(i=0;i<z1-1;i++)
{
for(j=0;j<z1-i-1;j++)
{
if(p[j]<p[j+1])
{
t=p[j];
p[j]=p[j+1];
p[j+1]=t;
strcpy(a,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],a);
}
}
}
for(i=0;i<z1;i++)
{
for(j=0;j<z1;j++)
{
if(p[i]==p[j])
{
if(strcmp(s[i],s[j])<0)
{
strcpy(a,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],a);
}
}
}
}
for(i=0;i<z1;i++)
{
if(i!=0)
printf("\n");
printf("%s %d",s[i],p[i]);
}
return 0;
}