Я использую следующую функцию в C++ для возврата первого символа в заданную строку, которая не повторяется, если не найдена return '@'.Печать первого символа в заданной строке, которая не повторяется
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
возвращает «а» вместо «Ъ».
Может понадобиться подключить эту утечку памяти, когда вы исправите это, кстати. – WhozCraig
@Levi первый цикл для цикла, устанавливающий все элементы в ноль, второй для подсчета частот в массиве и третий для проверки первого не повторяющегося символа. – toadalskiii
Сторона примечания: заменить 'int * count = new int [256]' на 'int count [256] '. Не нужно выделять его динамически (конечно, когда вы не пытаетесь освободить его в конце). BTW. Более стандартный способ использовать постоянное значение «256» в контексте этого кода будет включать «limits.h» и использовать «1 << CHAR_BIT' вместо этого. –