Это можно сделать, используя один цикл.
Вот и вы.
#include <stdio.h>
char * remove_duplicates( char *s, char c )
{
for ( char *p = s, *q = s; *q; )
{
if ( *++q != c || *p != c )
{
*++p = *q;
}
}
return s;
}
int main(void)
{
char s[] = "??hello?world????";
printf( "\"%s\"\n", s );
printf( "\"%s\"\n", remove_duplicates( s, '?' ) );
return 0;
}
Вывод программы:
"??hello?world????"
"?hello?world?"
Предполагается, что нользавершающий символ не должен указываться в качестве аргумента функции. В противном случае функция не имеет effetc и возвращает ту же строку.