题目描述:
字符串有些是对称的,有些不是对称的,请将那些对称的字符串安从小到大的顺序输出,字符串先以长度论大小,如果长度相等,再以ASCII码值为排序标准;
输入:
输入一个n,表示接下来有n组字符串,串长<=256; n<=1000;
输出:
根据每个字符串,输出对称的那些串,并且要求按从小到大的顺序输出;
样例输入:
7
123321
123454321
123
321
sdfsdfd
\\dd\\
121212
样例输出
123321
\\dd\\
123454321
题解
基本函数:
1. a.size() :返回向量a中元素的个数
2. a.empty() :判断向量a是否为空,空返回true
3. a.clear() :清空向量a的所有元素
4.a.insert():向向量a中插入
a.insert(pos,1000) :将1000插入到向量a的pos位置上。例:a.insert(a.begin(),1000) ;
a.insert(pos, n, 1000) :将1000分别插入到向量a的pos后n个位置上(包含pos)例:a.insert(a.begin(), 3, 1000) ;
b.insert(b.begin(), a.begin(), a.end()) : 将a.begin(), a.end()之间的全部元素插入到b.begin()前
5.a.erase:删除向量a的元素
a.erase(pos): 删除向量a中pos位置的元素
a.erase(st,ed): 删除向量中从st到ed之间的元素
6.b.swap(a): 交换a、b向量
7.resize(),设置大小(size)
重要算法:
使用时需要加上头文件 #include<algorithm>
(1)sort(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列
(2)reverse(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1
(3)copy(a.begin(),a.end(),b.begin()+1); //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
(4)find(a.begin(),a.end(),10); //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
bool cmp(const string& a,const string& b)
{
return a.length()==b.length()?a<b:a.length()<b.length();//从小到大排
}
int main()
{
int n;
cin>>n;
string s,t;
vector<string>v;
while(n--)
{
cin>>s;
t=s;
reverse(t.begin(),t.end());//revverse函数将字符串倒置
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;
}