题目内容:字符串有些是对称的,有些是不对称的,请将那些对称的字符串按从小到大的顺序输出。字符串先以长度论大小,如果长度相同,再以ASCII码值为排序标准。
输入描述:输入数据中含有一些字符串(1<=串长<=256)。
输出描述:根据每个字符串,输出对称的那些串,并且要求按从小到大的顺序输出。
题目分析:
(1)定义一个string类型的向量容器
(2)将输入的字符串反转,看是否和原字符串相同,以此判断字符是否对称
(3)若对称,则将该字符串插入到向量容器中
(4)使用sort算法对向量元素排序,自己设计排序比较函数,把这个函数指定给sort算法
排序比较函数的具体方法是,判断参与比较的没两个字符串的长度是否相等,若不相等则按长度从小到大的顺序返回;若相等则以ASCII码值为排序标准,即按字符串从小到大排序
参考代码:
#include <fstream> #include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; bool Comp(const string &s1,const string &s2) { return s1.length()!=s2.length()?s1.length()<s2.length():s1<s2; } int main(int argc,char * argv[]) { vector<string> v; string t,s; while(cin>>s) { t=s; reverse(t.begin(),t.end()); if(t==s) { v.push_back(s); } if(cin.get()==' ') { break; } } sort(v.begin(),v.end(),Comp); for(int i=0;i<v.size();i++) { cout<<v[i]<<endl; } system("pause"); return 0; }
运行结果: