题目描述:
字符串有些是对称的,有些不是对称的,请将那些对称的字符串安从小到大的顺序输出,字符串先以长度论大小,如果长度相等,再以ASCII码值为排序标准;
输入:
输入一个n,表示接下来有n组字符串,串长<=256; n<=1000;
输出:
根据每个字符串,输出对称的那些串,并且要求按从小到大的顺序输出;
样例输入:
7
123321
123454321
123
321
sdfsdfd
\\dd\\
121212
样例输出
123321
\\dd\\
123454321
思路:先将所有的回文串推入vector数组,遍历完所有的字符串以后再对所有的回文串进行排序输出
代码:
#include<bits/stdc++.h>
using namespace std;
bool cmp(string s, string t)
{
//长度相等则比较ASCII码
if(s.length()==t.length())return s<t;
//长度不等则比较长度
return s.length()<t.length();
}
int main()
{
string s,t;
vector<string>str;
int n,num=0;
cin>>n;
while(n--)
{
cin>>s;
t=s;
//得到s的倒序字符串
reverse(t.begin(),t.end());
//如果正序倒序相等即为回文串,推入数组中,并计数
if(t==s)str.push_back(s),num++;
}
//对所有的回文串排序
sort(str.begin(),str.end(),cmp);
//输出所有回文串
for(int i = 0; i < num; i++)
cout<<str[i]<<endl;
}
最后的输出也可以不用num:
//使用迭代器循环输出
vector<string>::iterator it;
for(it=str.begin();it<str.end();it++)
cout<<*it<<endl;