Вам нужно начать внутренний цикл со следующего символа после того, как он обрабатывается во внешнем цикле, в противном случае вы будете обрабатывать одну и ту же пару символов дважды, а также будете проверять символ против себя, когда i == j
.
Вы также должны выйти из внутреннего цикла, как только найдете совпадение.Вы найдете более поздние совпадения в будущей итерации внешнего цикла.В противном случае вы снова обработаете одну и ту же пару дважды.
И вам не следует увеличивать index
до назначения нулевого символа после цикла.Он был увеличен при добавлении повторения.
#include <stdio.h>
char * repeticoes(char *s) {
int index = 0;
for (int i = 0;( s[i] != '\0'); i++) //problem starts when i is > 0
{
for (int j = i+1; ( s[j] != '\0'); j++)
{
if (s[i] == s[j])
{
printf("%c == %c\ni %d j %d\n", s[i], s[j],i,j);
s[index++] = s[i];
break;
}
else
{
printf("not happening %c != %c\ni %d j %d\n", s[i],s[j],i,j);
}
}
}
s[index] = '\0';
return s;
}
int main() {
char input[21];
printf("str 1\n");
fgets(input, 20, stdin);
repeticoes(input);
printf("duplicated letters %s\n", input);
}