不规则图形排列(排列对称串)
输入多个字符串,有些是对称的,有些是不对称的,请将那些对称的字符串按从小到大的顺序输出字符串先以长度论大小,如果长度相同,再以ASCII码值为大小标准,今天小编就来说说关于不规则图形排列?下面更多详细答案一起来看看吧!
不规则图形排列
ICPC--1248: 排列对称串题目描述输入多个字符串,有些是对称的,有些是不对称的,请将那些对称的字符串按从小到大的顺序输出。字符串先以长度论大小,如果长度相同,再以ASCII码值为大小标准。
输入输入第一行是一个整数n(1<=n<=100),接下来n行是n个字符串,每个字符串不大于200个字符。
输出输出对称的那些串,并且要求按从小到大的顺序输出,每个字符串占一行。
样例输入
7
123321
123454321
123
321
sdfsdfd
121212
after noon retfa
123321
123454321
after noon retfa
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(const string &s1, const string &s2)//使用const:因为引用传参,比拷贝传参的效率要高,const是因为只是比较,而没有修改其内容。
{
return s1.length() != s2.length() ? s1.length()<s2.length() : s1<s2;
}
int main()
{
int n;
char ch;
vector<string> v;
cin >> n;
scanf("%c", &ch);//吃掉n之后的换行符,vc使用scanf(),在vs2013中不安全,提示为scanf_s();
string t, s;
//while(n--)
for (int k = 0; k<n; k )
{
getline(cin, t);//cin>>s不能输进空格
s = t;
reverse(t.begin(), t.end());
if (t == s)
{
v.push_back(s);
}
}
sort(v.begin(), v.end(), cmp);
for (int i = 0; i<v.size(); i )
{
cout << v[i] << endl;
}
return 0;
}
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com