C语言通过 指针方式解决字符串去重问题的 三种方法
方法一:双指针方式
这种方法是最容易想到,但也是最复杂的
char ch[100];
scanf("%[^\n]",ch);
char *p=ch,*q=ch+1;
while (*p)
{
while (*q)
{
if(*p==*q){//当检测到p指针指向的内容和q指针指向的内容相等时,执行下方代码
char *t=q;
while (*t)
{
*t=*(t+1);
t++;
}
continue;
}
q++;
}
p++;
q=p+1;//将q的地址重新回到p的下一个
}
puts(ch);
方法二:通过变量的方式移动指针
这种方法的优点是利用了strcpy()函数,省略了利用循环将数组往前推的过程。
char ch[50];
scanf("%[^\n]",ch);
char *p=ch;
for (int i = 0; *(p+i); i++)
{
for (int j = i+1; *(p+j+1); j++)
{
if(*(p+i)==*(p+j)){
strcpy(p+j,p+j+1);
j--;
}
}
}
puts(ch);
方法三:从后向前逐个替换相同字符,此方法最为简单
原理即是从后向前寻找相同字符,若是找到相同的,则会将后面的字符逐个向前替换前方字符,直到当前字符位置才停止
char ch[50],*p=ch;
gets(ch);
for (int i = 0; i<strlen(ch); i++)
{
for (int j = strlen(ch)-1; j>i; j--)
{
if(*(p+i)==*(p+j)){
*(p+j)=*(p+j+1);
}
}
}
puts(ch);