1.10 排列对称串

                                 1.10   排列对称串

 

1.10  题目内容

字符串有些是对称的,有些是不对称的,请将那些对称的字符串按从小到大的顺序输出。字符串先以长度论大小,如果长度相同,再以 ASCII 码值为排序标准。
输入描述:输入数据中含有一些字符串(1≤串长≤256)。
输出描述:根据每个字符串,输出对称的那些串,并且要求按从小到大的顺序输出。
输入样例 
123321 
123454321 
123 
321 
sdfsdfd 
121212 
\\dd\\ 
输出样例 
123321 
\\dd\\ 
123454321 

#include <iostream>
#include <set>
#include<algorithm>
using namespace std;
struct Comp
{
	bool operator()(const string &a,const string &b)
	{
		return (a.length()!=b.length()?a.length()<b.length():a<b);
	}
};
int main(int argc, char* argv[])
{
	multiset<string,Comp> ms;
    string t,s;
	while(cin>>s)
    {
    t=s;
    reverse(t.begin(),t.end());
    if(t==s)
    {
        ms.insert(s);
    }
    }
	multiset<string,Comp>::iterator is;
	for(is=ms.begin();is!=ms.end();is++)
	{
		cout<<*is<<endl;
	}
 return 0;
}

另解: 

#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); 
 } 
 } 
 //按 Comp 函数比较规则排序
 sort(v.begin(),v.end(),Comp); 
 //输出向量中的所有元素
 for(int i=0;i<v.size();i++) 
 { 
 cout<<v[i]<<endl; 
 } 
 return 0; 
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值