新人求家解决几个字符串的有关问题

新人求家解决几个字符串的问题!
1 把一个字符串按数字从小到大,字母从a到z排列,列如15ad119r排列为11159adr;
2 获取字符串中指定字符出现的次数,如15ad119r获取1的结果为3
3 去掉一个或几个字符. 如15ad119 去掉1个1 为5ad119r 去掉2个1为5ad19r
感谢各位大神提供下思路,具体的函数,或者给出列子。   
------解决思路----------------------
给一个删除字符的程序,第一个用排序,第二个类似:

#include <stdio.h>

void remove_char(const char* src, char* dest, char ch, int n)
{
    char* s = (char*)src;
    char* d = dest;

    while(*s){
        if((*s == ch) && (n > 0)){
            n--;
        }
        else{
            *d++ = *s;
        }
        s++;
    }
    *d = '\0';
}

int main(int argc, char* argv[])
{
    const char* src = "15ad119";
    char dest[32];

    remove_char(src, dest, '1', 1);
    printf("%s\n", dest);
    remove_char(src, dest, '1', 2);
    printf("%s\n", dest);
    remove_char(src, dest, '1', 3);
    printf("%s\n", dest);

    return 0;
}

------解决思路----------------------
#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
using namespace std;

string& remove_m_c(string &s, int m, char c)
{
if (s.size() < m)
{
cout << "Can't remove character '" << c << "' for " << m << " times. It exceeds the length of " << s << endl;
return s;
}

int i = 0;
while ( m > 0)
{
if (i >= s.size())
break;

if (s[i] == c)
{
s.erase(i, 1);
--m;
}
else
++i;
}

return s;
}

int main()
{
//把一个字符串按数字从小到大,字母从a到z排列,列如15ad119r排列为11159adr;
string str = "15ad119r";
sort(str.begin(), str.end());
cout << str << endl;

//获取字符串中指定字符出现的次数,如15ad119r获取1的结果为3
str = "15ad119r";
int n = count_if(str.begin(), str.end(), bind2nd(equal_to<char>(), '1'));
cout << n << endl;

//去掉一个或几个字符. 如15ad119 去掉1个1 为5ad119r 去掉2个1为5ad19r
str = "15ad119r";
remove_m_c(str, 3, '1');
cout << str << endl;

return 0;
}