一个统计字符出现次数的算法,求前辈们帮忙看下解决思路

一个统计字符出现次数的算法,求前辈们帮忙看下
参数是是一个字符指针,输出该指针指向的字符串中所出现的字符以及其个数:

int Counting(char *c)
{
if(c[0]=='0')
return -1;
int i,j,k,tag;
char *ch;
ch=(char*)malloc(20*sizeof(char));
int *count;
count=(int *)malloc(20*sizeof(int));

k=0;
ch[k]='0';
count[k]=0;

for(i=0;c[i]!='0';i++){
for(j=0;j<k;j++){
if(c[i]==ch[j])
{count[j]++;tag=1;break;}
}
if(tag==1)continue;

ch[k]=c[i];count[k]=1;
k++;
ch[k]='0';
}
for(i=0;i<k;i++)
cout<<ch[i]<<"的个数为: "<<count[i]<<endl;
return 1;
}

比如输入aacc 但是却时能输出“a的个数:2”,字符c的就不能输出了,我自己调试了几次都不行,希望大家能帮我看看。

------解决方案--------------------
C/C++ code

int Counting(char *c)
{
        if(c[0]=='\0')
        return -1;
        int i,j,k,tag=0;
        char *ch;
        ch=(char*)malloc(20*sizeof(char));
        int *count;
        count=(int *)malloc(20*sizeof(int));

        k=0;
        ch[k]='\0';
        count[k]=0;

        for(i=0;c[i]!='\0';i++){
                for(j=0;j<k;j++){
                        if(c[i]==ch[j]){count[j]++;tag=1;break;}
                }
                if(tag==1){tag=0;}
                else{ch[k]=c[i];
                count[k]=1;
                k++;}
        }

        for(i=0;i<k;i++){
                cout<<ch[i]<<"num: "<<count[i]<<endl;
        }
        return 1;
}

------解决方案--------------------
tag要记得归零
------解决方案--------------------
【回复#4楼】

【1】举个例子,比如一个字符串为:char *scpChar = "1234";

1、此字符串的组成为:'1','2','3','4','\0'。
2、要知道的是,每个完整字符串后边都有一个字符串终结符'\0'。
3、此字符串的长度为:4(而不是5)。

需要注意的是,若要用数组去装载该字符串的完整形式,数组长度应该是4+1。