首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

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

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

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。

热点排行