字符串去重分3種情況
1、去掉重複的字符,並且只保留一個
2、去掉重複的字符,如果有多個的保留兩個
3、去掉重複的字符,重複的一個都不保留
對應第一種情況的解法:
只需要對字符串進行遍歷,如果遍歷到重複的字符就跳過,如果遍歷到不重複的就賦值
第二種:
需要在第一種情況下加一個判斷bool變量,用於判斷是否已經加了一個。
第三種:
還是判斷當前遍歷的位置和下一個位置進行判斷,不過需要判斷兩次,因爲如果有AACB這種字符串,當遍歷到第二個A的時候下一個是C是不同的但是不知道C後面是不是還是C,所以第一次判斷爲true。下面進行第二次判斷,如果C後面不是C就證明C是僅有的一個不是重複的。
第一種
void Remove_1(char * str){
int index = 0;
int pos = 1;
while(str[pos] != '\0'){
if(str[pos] != '\0'){
index++;
str[index] = str[pos];
}
pos++;
}
str[++index] = '\0';
}
測試效果
第二種
void Remove_2(char * str){
int index = 0;
int pos = 1;
bool flag = false;
while(str[pos] != '\0'){
if(str[pos] != str[index]){
index++;
str[index] = pos;
flag = true;
}
else{
if(flag){
index ++;
str[index] = str[pos];
flag = false;
}
}
pos++;
}
str[++index] = '\0';
}
測試效果:
第三種
void Remove_3(char * str){
int index = -1;
int pos = 0;
bool flag = false;
for(pos = 0;str[pos] != '\0';pos++){
if(str[pos] == str[pos+1]){
flag = true;
}
else{
if(flag){
flag = false;
}
else{
str[++index] = str[pos];
}
}
}
str[++index] = '\0';
}
測試效果