输入例如:aabb2222ccc 输出a2b2c3 ,不知道怎么用一次循环就搞定

 #define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int del_other_char(char *str_old, char *str_new)
{
    int ret = 0;
    if (str_old == NULL || str_new == NULL)
    {
        return -1;
    }
    while (*str_old != '\0')//去除除了小写字母以外的任何字符,拷贝到新的字符串中
    {
        if (*str_old >= 'a' && *str_old <= 'z')
        {
            *str_new++ = *str_old;
        }
        str_old++;
    }
    *str_new = '\0';
    return ret;
}
int change_str(char  *str_old, char *str_new)
{
    int ret = 0;
    if (str_old == NULL || str_new == NULL)
    {
        return -1;
    }
    while (*str_old != '\0')
    {
        int ncount = 1;
        while (*str_old == *(str_old + 1))
        {
            ncount++;
            str_old++;
        }
        *str_new++ = *str_old++;
        *str_new++ = ncount + 48;
    }
    *str_new = '\0';
    return ret;
}
int main()
{
    int ret = 0;
    char *str_old = "23423aaaaaabbbbbdddddawewewew323eeee eee2323tyuttt";
    char str_new1[100];
    char str_new2[100];
    ret = del_other_char(str_old, str_new1);
    if (ret != 0)
    {
        printf("ERROR!!! func del_other_char()");
        return ret;
    }
    ret = change_str(str_new1, str_new2);
    if (ret != 0)
    {
        printf("ERROR!!! func change_str()");
        return ret;
    }
    printf("%s", str_new2);
    system("pause");
}


 #include <iostream>
#include <memory>

using namespace std;

int main()
{
    int stat[256];
    memset(&stat[0], 0, sizeof(int) * 256);
    char s[200] = "aabb2222ccc";
    char *p = &s[0];
    while (*p != '\0')
    {
        stat[(int)*p]++;
        p++;
    }
    for (char i = 'a'; i <= 'z'; i++)
        if (stat[(int)i] != 0) cout << i << stat[(int)i];
    cout << endl;
    return 0;
}

http://codepad.org/6Fd8V6z0

新建一个int数组,长度256,用输入值做下标,每出现一次,相应的值加1,然后遍历一遍这个数组就OK了

用map容器或者hash表就可以了