#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++)首先,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”