作者:手机用户2602883655 | 来源:互联网 | 2023-09-17 15:37
第一种实现:不新开数组,也就是原地去重.#include#includevoidRemoveDuplicate(charstr[]);intmain(intargc,char*ar
第一种实现: 不新开数组, 也就是原地去重.
#include #include void RemoveDuplicate(char str[]);
int main(int argc,char *argv[]){ char str[128] = {0}; gets(str); RemoveDuplicate(str); printf(“%s\n”,str); return 0;
}
void RemoveDuplicate(char str[]){ int len = strlen(str); int i,j; int p = 0; for(i = 0;i }
上面的代码一共出现了3次’\0′, 前2次的’\0’没有什么特殊含义, 可以替换成任何在所给字符串中不会出现的字符. 最后一个’\0’则是C语言中特有的, 是字符串结束标志.就是把所有重复的元素标记成’\0′, 那么剩下的元素则是不重复的元素, 通过变量p, 把这些元素重新添加到结果字符串中即可.
第二种实现:新开一个数组
#include #include void RemoveDuplicate(char str[],char result[]);
int main(int argc,char *argv[]){ char str[128] = {0}; char result[128] = {0}; gets(str); RemoveDuplicate(str,result); printf(“%s\n”,result); return 0;
}
void RemoveDuplicate(char str[],char result[]){ int slen = strlen(str);//源(原)字符串的长度 int rlen;//结果字符串的长度 int i,j; int flag = 0;//重复的标志 for(i = 0; i }
第三种, 一层循环, 开个ASCII数组进行标记(这种方法很值得我学习掌握)
#include #include void RemoveDuplicate(char str[]);
int main(int argc,char *argv[]){ char str[128] = {0}; gets(str); RemoveDuplicate(str); printf(“%s\n”,str); return 0;
}
void RemoveDuplicate(char str[]){
int len = strlen(str);
char ascii[128] = {0};//ascii数组
int i;
int p = 0; for(i = 0;i //把字符串中字符用作ascii数组的下标,在遍历str数组的过程中,str[i]首次出现时,str[i]对应//的ascii[str[i]]是0,便将其置1,以后再出现相同的字符时,该字符对应的ascii[]已被置1 if(0 == ascii[str[i]]){ ascii[str[i]] = 1;
str[p++] = str[i]; }
}
str[p] = ‘\0’;
}
第四种, 也是新开ASCII数组进行标记, 实现去2重, 比如输入: sswqswww, 输出: sswqw
#include #include void removeDuplicate(char str[]);
int main (void) { char name[] = “sswqswww”; removeDuplicate(name); printf(“%s\n”, name); return 0;
}
void removeDuplicate(char str[]) { int len = strlen(str); int ascii[128] = {0}; int p = 0; int i; for (i=0; i第五种, 上面的代码简单改下, 既可以实现去n重
#include #include void removeDuplicate(char str[], int n)
int main (void) { char name[] = “sswqswww”; removeDuplicate(name, 2); printf(“%s\n”, name); return 0;
}
void removeDuplicate(char str[], int n) { int len = strlen(str); int ascii[128] = {0}; int p = 0; int i; for (i=0; i