2012-07-08 77 views
0

我试图找到最出现字符数组以下算法中的数组最出现的字符:发现在焦炭

char a[]={"aaaadddddaa"}; 
int max=0; 
int count=0; 
char maxCharcter; 
for(char q='a';q<='z';q++) 
{ 
    for(int i=0; i<strlen(a);i++) 
    { 
     if(a[i]==q) 
      count++; 
    } 

    if(count>max) 
    { 
     max=count; 
     maxCharcter=q; 
    } 
} 

cout<<max<<endl; 
cout<<maxCharcter<<endl; 

输出应该是max=6 maxCharcter=a,但我得到max=11 maxCharcter=d。我究竟做错了什么?

+5

请注意,虽然这有效(一旦纠正),但效率非常低。有一个更有效的算法。 – 2012-07-08 16:56:27

+0

'std :: unique'和'std :: count'的组合会比重新发明轮子更好。 – chris 2012-07-08 17:20:34

回答

1

count应该里面第一个被初始化为循环

for(char q='a';q<='z';q++) { 
    count = 0; 
    //continue code here 
} 
+0

感谢它的工作。 – XNA 2012-07-08 16:54:52

+1

@XNA不是感谢,upvote答案,并可能接受它。 – 2012-07-08 16:58:56

1

这可能是你唯一的“重设”算一次,而不是为每个字符。

int count=0; 
char maxCharcter; 
for(char q='a';q<='z';q++) 
{ 
    for(int i=0; i<strlen(a);i++) 

大概应该是

char maxCharcter; 
for(char q='a';q<='z';q++) 
{ 
    int count=0; 
    for(int i=0; i<strlen(a);i++) 

除此之外,你可以通过刚刚通过串去一次,使用另一个阵列来计算每个字符的出现整件事加快...