C语言删除字符串中的某个特定字符!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言删除字符串中的某个特定字符!相关的知识,希望对你有一定的参考价值。

#include<stdio.h>

int main()



char s[100],*p ,*q ;

puts("输入小于100个字符:");

gets(s);

char del_x;

printf("输入要删除的字符:");

scanf("%c",&del_x);

for(p=s,q=s;*p!='\0';p++)

if(*p!=del_x)*q++=*p;
*q=*p;//这是什么意思,是让字符串末尾为\0吗

puts(s);//为啥是输出s呢,s好像并没有变化呀

return 0;

*q=*p;是让字符串末尾为'\0'。

当然是输出s。
分析一下:
q用来指向s中下一个插入位置,p用来遍历s的各字符。开始q和p都指向s的第一个字符。

如果p指向的字符不是要删除的字符,就将它赋给q指向的字符,并使q指向下一个位置,这是通过*q++=*p;实现的;如果p指向的字符是要删除的字符,跳过它,不将它复制给q指向的位置。接着令p指向下一个字符(无论是否执行了*q++=*p;语句)。for结束后p指向'\0',q指向的字符前面是删除了del_x后剩下的字符,最后执行*q=*p;令字符串末尾为'\0'。追答

参考技术A 题主的注释是正确的。
首先,p q都指向s指向的数组。你可以完全把p q当成s一样的东西,只不过*q *p是可以变化的。
p作为循环判断,只要p不空就继续循环。p不为要删除的字符,就将p目前指向的字符赋值到q。
如:
s: 12345
del_x: 3
首先,q[0] = p[0] = 1; q++;其实是s[0] = s[0]
然后q[1] = 2; q++;s[1] = s[1],其实在遇到要删除的字符前赋值并没有意义,只需要q++就行
q[2] = 4,从这里开始,因为已经删除了3,所以q必须开始变化,所以需要使用q[2] = p[3],就是s[2] = s[3]
最后循环结束的q:12455,而*p = '\0',所以把q最后一位赋值成\0。追问

为啥第二次循环的时候 输入sasasa a 输出ss 第一个s不见了 咋回事啊

追答

我理解好像是你的scanf("%c",&del_x);没有读取到你的输入。明天白天再看看。

本回答被提问者采纳
参考技术B 这个容易,就是把指定位置的字符去掉,也就是说后面的字符覆盖
比如删除指定的字符在字符串中第一个出现的位置
void
strdel(
char*
str,
char
ch
)

char
*p
=
str;
while(
*p
)

if(
*p==ch
)
break;

if(
*p
)

while(
*p
)

*p==*(p+1);
p++;



希望能解决您的问题。
参考技术C 这个看着没有问题呀。
那句的意思就是把最后的\0也复制过来追问

为啥第二次循环的时候 输入sasasa a 输出ss 第一个s不见了 咋回事啊

以上是关于C语言删除字符串中的某个特定字符!的主要内容,如果未能解决你的问题,请参考以下文章

c语言编写一个程序,实现查找一个字符串中的特定字符,并将其删除.

怎么找到一个字符串中特定字符的位置

c语言 从字符串中删除特定字符

JAVA字符串中取特定字符的位置

★c语言★如何删除字符串中的第一位?★

如何在c++的字符串中删除某个字符串