字符串排序
Total Submit : 1706 Accepted : 415
Description
有一些A、C、M组成的字符串,将其按字符A排序。
Input
一组测试数据,输入数据由若干行组成,每行是字符A、C或M组成的字符串。(每个字符串长度不超过1200)
Output
对所有输入的数据,先按字符A的个数进行升序排序,如果字符A的数量相等,再按出现的先后顺序排序,每行输出一个字符串。
Sample Input
ACM
MCA
AACAAMMM
AACCMM
CMAAMMMMMM
AAA
Sample Output
ACM
MCA
AACCMM
CMAAMMMMMM
AAA
AACAAMMM
Source
NUPT
这道题首先令我最懵的是输入,即是我不知道如何处理这种不确定个数的输入,弄了几个诸如while(s[i]!="");这样的东西,还跑去查了回车的ASCII码,然而都没什么用,最后尝试用文件的时候,才发现输入完之后直接摁Ctrl+Z就可以了。。。从此又发现了新大陆~(附上截图)
其次第二个点是题目要求 “如果字符A的数量相等,再按出现的先后顺序排序” ,如果单纯用sort函数,A的数目相等时可能会改变字符串的顺序,这时候就应该用stable_sort函数以确保它们的顺序不变。
具体可以看看http://blog.csdn.net/godenlove007/article/details/7982450
http://blog.sina.com.cn/s/blog_933dc4350100y9yk.html
以下是代码:
#include<cstdio>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
string s[10000];
bool cmp(string s1, string s2)
{
int cnt1,cnt2;
cnt1=count(s1.begin(),s1.end(),'A');
cnt2=count(s2.begin(),s2.end(),'A');
return cnt1<cnt2;
}
int main()
{
int cnt=0;
while(cin>>s[cnt])
cnt++;
stable_sort(s,s+cnt,cmp);
for(int i=0;i<cnt-1;i++)
cout<<s[i]<<endl;
cout<<s[cnt-1]<<endl;
return 0;
}