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;
当然是输出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'。追答
首先,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语言删除字符串中的某个特定字符!的主要内容,如果未能解决你的问题,请参考以下文章