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
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追加了内容
望采纳!