我在c ++中使用以下函数返回给定字符串中不重复的第一个字符,如果没有找到则返回' @'。
char MyMethod(const char* str, int len){
int i,index=-1;
int *count = new int[256];
for(i=0;i<len;i++)
{
count[*(str+i)]=0;
}
for(i=0;i<len;i++)
{
count[*(str+i)]++;
}
for(i=0;i<len;i++)
{
if(count[*(str+i)]==1)
{
index=i;
break;
}
}
if(index==-1)
return '@';
else
return *(str+index);
}
这个方法看起来很好,但总是返回字符串的第一个字符。 例如,对于以下字符串
aabcdd
它返回&#39; a&#39;而不是&#39; b&#39;。
答案 0 :(得分:2)
我相信有一个错字。 声明:
if(count[*(str+i)]==1);
不应该被终止:
if(count[*(str+i)]==1)
删除分号,以便仅在条件为真时才评估if
条件之后的语句。
否则,无论if
的结果如何,都将评估语句。