Рекурсия слишком сложна, я думаю.
Давайте начнем с 2 курсоров в начале str
Сначала все oop в строке. Пока мы не достигаем конца *p
строки, ожидаем p++
while (*p++) {
if (*p == *current)
continue;
Если следующий символ совпадает с текущим, продолжайте поиск следующего другого символа.
current++;
*current = *p;
Если найден другой символ, просто поместите его после текущего.
#include <stdio.h>
char* remove_duplicates (char* str){
char *p = str;
char *current = p;
while (*p++) {
if (*p == *current)
continue;
current++;
*current = *p;
}
return str;
}
int main()
{
char sample[] = "MMMMMuuuuuOOOOOKKKKLLLEE OOOOLLL";
printf("OLD: |%s|\n", sample);
printf("NEW: |%s|\n", remove_duplicates(sample));
printf("NEW: |%s|\n", remove_duplicates(""));
return 0;
}
OLD: |MMMMMuuuuuOOOOOKKKKLLLEE OOOOLLL|
NEW: |MuOKLE OL|
NEW: ||
Деталь с AAAB
c для текущего
p
v
AAAB0
^
c
p
v
AAAB0
^
c
p
v
AAAB0
^
c
p
v
ABAB0
^
c
p
v
ABAB0
^
c
p
v
ABAB0
^
c
p
v
AB0B0
^
c
Получим AB