问题标题: 酷町堂:4436!

0
0
已解决
吴文光
吴文光
新手光能
新手光能

4436   英文句子排序

题目描述 Description

对N个英文句子进行排序,规则为:先按照每个句子的首字母从小到大排,首字母相同的按照句子长度从小到大排序,句子长度相同按照第一个单词长度从小到大排序

输入描述 Input Description

n+1行,第一行一个整数n,表示句子的个数
后面n行每行一个字符串

输出描述 Output Description

n行,每行一个字符串

样例输入 Sample Input

 

2
Hello World
Aloha World

样例输出 Sample Output

 

Aloha World
Hello World

数据范围及提示 Data Size & Hint

n<=10


0
已采纳
董宇昊
董宇昊
初级启示者
初级启示者
Hi,吴文光你好!
以下为本题核心代码!!

cmp函数里的比较:
bool cmp(字符串 x,字符串 y){//字符串:string
    if(x.substr(0,1)!=y.substr(0,1))
    return x.substr(0,1)<y.substr(0,1);
    if(x.size()!=y.size())
    return x.size()<y.size();
    if(x.find(' ',0)!=y.find(' ',0))
    return x.find(' ',0)<y.find(' ',0);
}
主函数里,定义整形变量n,字符串数组a[11];
   输入>>n;
    getline(cin,a[0]);//吸收换行
    for循环{
        输入a[i];//getline(cin,a[i])
    }
    sort排序;
    for循环{
        输出<<a[i]<<endl;
    }

 

头文件:

#include<string>

#include<algorithm>

祝你AC愉快!!

望采纳,谢谢!!

0
潘晨皓
潘晨皓
高级天翼
高级天翼

头文件:#incldue<bits/stdc++.h>

 

0
李素妍
李素妍
新手天翼
新手天翼
字符串 s;
struct cmd
{
    字符串 c; 
    整形 cnt1;//cnt1是第1个单词的长度 
    整形 cnt;//字符串长度 
}v[20];
bool cmp(cmd a,cmd b)
{
    if(a.c[0]!=b.c[0]) return a.c<b.c;//首字母 从小到大 
    if(a.cnt!=b.cnt)  return a.cnt<b.cnt;//句子的长度 从小到大 
    if(a.cnt1!=b.cnt1)return a.cnt1<b.cnt1;//第1个单词长度  从大到小 
}
int main()
{
    int n;
    cin>>n;
    getline(cin,s);//吃掉换行 
    for(int i=1;i<=n;i++)    
    {
        getline(cin,v[i].c);
        v[i].cnt=v[i].c.size();//字符串的长度
        v[i].cnt1=v[i].c.find(' ',0);//找到第一个空格的位置也即第一个单词的长度

    }   
    sort(v+1,v+n+1,cmp);
    for(int i=1;i<=n;i++){
        cout<<v[i].c<<endl;
    }

一定AC

李素妍在2020-02-15 17:21:03追加了内容

加头文件#include<algorithm>

李素妍在2020-02-15 19:12:11追加了内容

望采纳!

我要回答