C++排列对称串


题目内容:字符串有些是对称的,有些是不对称的,请将那些对称的字符串按从小到大的顺序输出。字符串先以长度论大小,如果长度相同,再以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()=='\n')

        {

            break;

        }

    }

    sort(v.begin(),v.end(),Comp);

    for(int i=0;i<v.size();i++)

    {

        cout<<v[i]<<endl;

    }

    system("pause");

    return 0;

}

运行结果:

推荐阅读:

C/C++程序内存分配详解

C++程序的内存布局

相关内容