ZZULIOJ--1248: 排列对称串

时间限制: 1 Sec 内存限制: 128 MB
提交: 326 解决: 85
[状态] [提交] [命题人:admin]
题目描述
输入多个字符串,有些是对称的,有些是不对称的,请将那些对称的字符串按从小到大的顺序输出。字符串先以长度论大小,如果长度相同,再以ASCII码值为大小标准。

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

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

样例输入 Copy
7
123321
123454321
123
321
sdfsdfd
121212
after noon retfa
样例输出 Copy
123321
123454321
after noon retfa

#include
#include
#include
#include
#include
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;
}
 

你可能感兴趣的:(ZQ)