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;
puts(s);
return 0;
}*q++=*p是什么意思啊

你好!

    p,q是指针,*p,*q表示p,q指向的地址储存的字符

    ++是自增运算符,*q++=*p表示将当前p指向的地址储存的值赋值给q指向的地址,赋值完成后q++,即q指向下一位地址

根据程序来说:

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

    首先,p作为循环下标,从s字符串的第一位到最后一位判断是否为删除的字符

    其次,q作为新字符串s的下标,对于每一位非删除字符,保存下来,q下标+1等待下一个字符

    最后,退出循环时p指向的是空字符,q还在等待新字符,这时将*p赋给*q表示新字符串结束,然后puts输出

如果还没有理解的话可以用实例来分析一下,对于字符串 s =“abcabc”,删除字符‘a’,简单设s起始位置为0,则s[0]='a',s[1]='b',s[2]='c',s[3]='a',s[4]='b',s[5]='c',s[6]='\0'

    循环开始时,p = 0,q = 0,到*p='\0',即p=6时结束,p每次+1

    p = 0,q = 0,此时*p=s[0]='a',需要删除,则不记录

    p = 1,q = 0,此时*p=s[1]='b',不需删除,记录*q即s[0] = 'b',q = q+1

    p = 2,q = 1,此时*p=s[2]='c',不需删除,记录*q即s[1] = 'c',q = q+1

    p = 3,q = 2,此时*p=s[3]='a',需要删除,则不记录

    p = 4,q = 2,此时*p=s[4]='b',不需删除,记录*q即s[2] = 'c',q = q+1

    p = 5,q = 3,此时*p=s[5]='c',不需删除,记录*q即s[3] = 'c',q = q+1

    p = 6,q = 4,此时*p=s[6]='\0',退出循环

此时*q = *p,即s[4] = '\0' 表示字符串结束,最后新字符串s = “bcbc”

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-01-08

#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;puts(s);return 0;}

追问

可是if后面的语句是啥意思啊

本回答被网友采纳