1248: 排列对称串

题目描述

输入多个字符串,有些是对称的,有些是不对称的,请将那些对称的字符串按从小到大的顺序输出。字符串先以长度论大小,若是长度相同,再以ASCII码值为大小标准。 ios

 

输入

输入第一行是一个整数n(1<=n<=100),接下来n行是n个字符串,每一个字符串不大于200个字符。 算法

 

输出

输出对称的那些串,而且要求按从小到大的顺序输出,每一个字符串占一行。 安全

 
 
 

题目分析:函数

(1)定义一个string类型的向量容器spa

(2)将输入的字符串反转,看是否和原字符串相同,以此判断字符是否对称设计

(3)若对称,则将该字符串插入到向量容器中code

(4)使用sort算法对向量元素排序,本身设计排序比较函数,把这个函数指定给sort算法blog

排序比较函数的具体方法是,判断参与比较的没两个字符串的长度是否相等,若不相等则按长度从小到大的顺序返回;若相等则以ASCII码值为排序标准,即按字符串从小到大排序排序

#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_s("%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; }
相关文章
相关标签/搜索