一个统计字符出现次数的算法,求前辈们帮忙看下解决思路
一个统计字符出现次数的算法,求前辈们帮忙看下
参数是是一个字符指针,输出该指针指向的字符串中所出现的字符以及其个数:
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的就不能输出了,我自己调试了几次都不行,希望大家能帮我看看。
------解决方案--------------------
参数是是一个字符指针,输出该指针指向的字符串中所出现的字符以及其个数:
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。