C语言删除字符串中的某个特定字符!
发布网友
发布时间:2022-04-22 20:27
我来回答
共4个回答
热心网友
时间:2022-04-17 16:15
*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'。追答
热心网友
时间:2022-04-17 17:33
题主的注释是正确的。
首先,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);没有读取到你的输入。明天白天再看看。
热心网友
时间:2022-04-17 19:08
这个容易,就是把指定位置的字符去掉,也就是说后面的字符覆盖
比如删除指定的字符在字符串中第一个出现的位置
void
strdel(
char*
str,
char
ch
)
{
char
*p
=
str;
while(
*p
)
{
if(
*p==ch
)
break;
}
if(
*p
)
{
while(
*p
)
{
*p==*(p+1);
p++;
}
}
}
希望能解决您的问题。
热心网友
时间:2022-04-17 20:59
这个看着没有问题呀。
那句的意思就是把最后的\0也复制过来追问为啥第二次循环的时候 输入sasasa a 输出ss 第一个s不见了 咋回事啊