C语言删除字符串中的某个特定字符!
#include<stdio.h>intmain(){chars[100],*p,*q;puts("输入小于100个字符:");gets(s);chardel_x;pri...
#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;
} 展开
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;
} 展开
4个回答
展开全部
题主的注释是正确的。
首先,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。
首先,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);没有读取到你的输入。明天白天再看看。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个容易,就是把指定位置的字符去掉,也就是说后面的字符覆盖
比如删除指定的字符在字符串中第一个出现的位置
void
strdel(
char*
str,
char
ch
)
{
char
*p
=
str;
while(
*p
)
{
if(
*p==ch
)
break;
}
if(
*p
)
{
while(
*p
)
{
*p==*(p+1);
p++;
}
}
}
希望能解决您的问题。
比如删除指定的字符在字符串中第一个出现的位置
void
strdel(
char*
str,
char
ch
)
{
char
*p
=
str;
while(
*p
)
{
if(
*p==ch
)
break;
}
if(
*p
)
{
while(
*p
)
{
*p==*(p+1);
p++;
}
}
}
希望能解决您的问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个看着没有问题呀。
那句的意思就是把最后的\0也复制过来
那句的意思就是把最后的\0也复制过来
追问
为啥第二次循环的时候 输入sasasa a 输出ss 第一个s不见了 咋回事啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询