注册 登录
编程论坛 C++教室

求助一道题目:有一些A、C、M组成的字符串,将其按字符A排序。

dengdaisky 发布于 2013-03-19 12:39, 933 次点击
有一些A、C、M组成的字符串,将其按字符A排序。

输入

一组测试数据,输入数据由若干行组成,每行是字符A、C或M组成的字符串。

输出

对所有输入的数据,先按字符A的个数进行升序排序,如果字符A的数量相等,再按出现的先后顺序排序,每行输出一个字符串。

样例输入

ACM
MCA
AACAAMMM
AACCMM
CMAAMMMMMM
AAA

样例输出

ACM
MCA
AACCMM
CMAAMMMMMM
AAA
AACAAMMM
想了半天都做不来
这是我的博客,里面有一些免费经典的C++视频教程,大家可以去参观;
http://www.
我的博客地址:
http://www.

[ 本帖最后由 dengdaisky 于 2013-3-19 12:51 编辑 ]
6 回复
#2
azzbcc2013-03-19 12:45
先把求 ‘A’个数的函数写出来吧
#3
dengdaisky2013-03-19 12:51
回复 2楼 azzbcc
我不会求啊,题目都看不怎么懂,无法下手
#4
azzbcc2013-03-19 12:59
那先不管题目, 求一个字符串中 某个字符的个数 怎么求?
#5
dengdaisky2013-03-19 13:15
回复 4楼 azzbcc
假设字符串是str,某一个字符是c,数量是n
for(n = i = 0; str[i]; i++)
n += (str[i] == c);
#6
azzbcc2013-03-19 13:24
然后在按 字符‘A’的个数排序,就是这样、、
#7
rjsp2013-03-19 14:54
抛砖引玉吧,提供一个没有效率优化的示范代码

若你的编译器支持C++标准,比如gcc4.7.2,可以用如下代码
程序代码:
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <string>
using namespace std;

int main()
{
    vector<string> buf = vector<string>( istream_iterator<string>(cin), istream_iterator<string>() );
    std::stable_sort( buf.begin(), buf.end(), []( const string& a, const string& b ) { return count(a.begin(),a.end(),'A') < count(b.begin(),b.end(),'A'); } );
    copy( buf.begin(), buf.end(), ostream_iterator<string>(cout,"\n") );

    return 0;
}

若你的编译器对C++标准支持不那么好,比如VC++9.0,可以将 lambda函数 改为 函数对象,代码如下
程序代码:
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <string>
using namespace std;

struct foo {
    bool operator()( const string& a, const string& b ) const {
        return count(a.begin(),a.end(),'A') < count(b.begin(),b.end(),'A');
    }
};

int main()
{
    vector<string> buf = vector<string>( istream_iterator<string>(cin), istream_iterator<string>() );
    std::stable_sort( buf.begin(), buf.end(), foo() );
    copy( buf.begin(), buf.end(), ostream_iterator<string>(cout,"\n") );

    return 0;
}

1