#include <iostream>
#define N 80
using namespace std;
int main()
{
char str[N],x;
void del_char(char *str,char x);
cout<<"Enter a string: ";
gets(str);
cout<<"Enter the character deleted: ";
cin>>x;
del_char(str,x);
cout<<"The new string is: "<<str<<endl;
return 0;
}
void del_char(char *p,char x)
{
char *q=p;
for(;*p!='\0';p++)
if(*p!=x) *q++=*p;
*q='\0';
}
上面的代码没错,我想问几个问题。字符串的删除函数中,if语句之后*q++=*p,这里的*p是指针里的第二个值吗,for语句第一条件为空具体是怎么执行下面的内容的,请高手说明一下。还有就是主函数里的输出语句cout<<"The new string is: "<<str<<endl;这里直接输出str,但是str在函数调用中并没有改变啊,为什么指针的内容变成指针q的内容?
再问一下,这里char *q=p;如果定义指针q的时候给它赋值为其它内容行不行?不赋值p给它。
谢谢,能不能帮我解释一下for语句的执行过程,特别是两个指针赋值那一部分,第一次执行时p是第几个?
追答什么叫“第一次执行时p是第几个?”
if(*p!=x) *q++=*p; 这边就是把非x的字符复制到原字符串中 原本是x的位置就被覆盖了
比如 字符串是 abc "x"是b 那么循环的时候
1: p->a q->a
2: p->b q->b 但是这个时候q没有++
3: p->c q->b 这时候b就被c覆盖了
就是字符串中的第几个字符一开始已经将p赋值给q了,接下去不是应该是p++了吗,for语句哩的*q++=*p不是重复将p赋值给q了吗,for语句第一个条件省略是怎么执行的?