R7-6 将句子中的单词按照出现的次数多少排序输出 (8 分)输入1行由任意个英文单词组成的句子(句子中字符数不超过200),英文单词只包含字母,句子中单词之间可以用任何非字母字符进行分隔。编程

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值