#include <stdio.h>
#include <string.h>
void removeDuplicates(char *str)
{
//空字符串或空指针处理
if(str == NULL || *str == '\0')
{
return;
}
int len = strlen(str);
int i, j = 0;//i用于遍历原字符串,j用于指向去重后的字符串末尾
for(i = 0; i < len; i++)
{
//检查当前字符是否已经在去重后的字符串中出现过
int k;
for(k = 0; k < j; k++)
{
//如果找到相同的字符,则跳出内层循环
if(str[i] == str[k])
break;
}
//如果内层循环正常结束,即k == j,说明str[i]是新的字符
if(k == j)
{
//将新字符添加到去重后的字符串末尾
str[j++] = str[i];
}
}
//在字符串末尾添加字符串结束符
str[j] = '\0';
}
int main(int argc, char const *argv[])
{
char str[] = "hello, world! hello";
printf("去重前: %s\n",str);
removeDuplicates(str);
printf("去重后: %s\n",str);
return 0;
}
在这个代码中,removeDuplicates函数接收一个字符串str作为参数。它首先检查字符串是否为空或空指针,然后遍历这个字符串。对于每个字符,它都通过一个内部循环来检查这个字符是否已经在去重后的字符串中出现过。如果没有出现过(即内部循环正常结束,k == j),则将该字符添加到去重后的字符串末尾,并更新j的值。最后,在遍历完成后,它在去重后的字符串末尾添加一个字符串结束符\0。