C语言指针使用问题
代码目的是实现从键盘输入一个字符串与一个指定字符,将字符串中出现的指定字符全部删除。假设输入的字符串是program,指定字符为r。下面这个是教科书上的例子:#inclu...
代码目的是实现 从键盘输入一个字符串与一个指定字符,将字符串中出现的指定字符全部删除。
假设输入的字符串是program,指定字符为r。
下面这个是教科书上的例子:
#include <stdio.h>
void prochar(char *str,char c)
{
char *p;
for(p=str;*p!='\0';p++)
if(*p!=c)
*str++=*p;
*str='\0';
}
void main()
{
char str[80],char_c;
gets(str);
scanf("%c",char_c);
prochar(str,char_c);
puts(str);
}
以下是课后习题中要求写出运行结果的代码:
#include <stdio.h>
void main()
{
char str[80];
void prochar(char *str,char ch);
scanf("%s",str);
prochar(str,'r');
puts(str);
}
void prochar(char *str,char ch)
{
char *p;
for(p=str;*p!='\0';p++)
if(*p==ch)
{
*str=*p;
(*str)++;
str++;
}
*str='\0';
}
上面这题,我给的回答是srosra。但是答案说是pogam,与第一个程序的结果相同,但是我怎么也运行不出pogam这个结果,我运行的是ss,不知道问题出在哪里,好乱。
另外我注意到第一个程序里面*str++=*p;意思是把p指向的值赋给str指向的值,然后指针自增1。
而第二个程序里面写的是(*str)++,我的理解就是str指向的值自增1,既然如此'r'+1自然就等于's'了,我到底哪里不对了?还是答案给错了?恳请大神大牛们来帮帮我。
写错了 回答的是srosram 展开
假设输入的字符串是program,指定字符为r。
下面这个是教科书上的例子:
#include <stdio.h>
void prochar(char *str,char c)
{
char *p;
for(p=str;*p!='\0';p++)
if(*p!=c)
*str++=*p;
*str='\0';
}
void main()
{
char str[80],char_c;
gets(str);
scanf("%c",char_c);
prochar(str,char_c);
puts(str);
}
以下是课后习题中要求写出运行结果的代码:
#include <stdio.h>
void main()
{
char str[80];
void prochar(char *str,char ch);
scanf("%s",str);
prochar(str,'r');
puts(str);
}
void prochar(char *str,char ch)
{
char *p;
for(p=str;*p!='\0';p++)
if(*p==ch)
{
*str=*p;
(*str)++;
str++;
}
*str='\0';
}
上面这题,我给的回答是srosra。但是答案说是pogam,与第一个程序的结果相同,但是我怎么也运行不出pogam这个结果,我运行的是ss,不知道问题出在哪里,好乱。
另外我注意到第一个程序里面*str++=*p;意思是把p指向的值赋给str指向的值,然后指针自增1。
而第二个程序里面写的是(*str)++,我的理解就是str指向的值自增1,既然如此'r'+1自然就等于's'了,我到底哪里不对了?还是答案给错了?恳请大神大牛们来帮帮我。
写错了 回答的是srosram 展开
展开全部
答案没错的,是你理解错了,这里不是要把r替换为s。
重点看这段代码:
if(*p==ch)
{
*str=*p;
(*str)++;
str++;
}
这里的意思是当p指向的字符和ch相等时,将str所指向的字符变为ch,然后再++对应这里也就是先变为r然后变为s,str++表示str指向下一个字符。这里的str一开始是指向program中的p字符,然后当p指针指向r字符时,str还是指向p字符,接着str将p字符改为r,然后又++改为s。接着p指针继续向下移动,一直到第二个r,然而此时的str是指向program中的第二个元素也就是r,然后重复和之前一样的步骤变为s。最后跳出循环后,*str='\0';表示截断。
哦,还有就是你第一个程序写错了,scanf函数要的是指针,不是scanf("%c",char_c);这样的。char_c是个变量名,应该scanf("%c",&char_c);
That'all
重点看这段代码:
if(*p==ch)
{
*str=*p;
(*str)++;
str++;
}
这里的意思是当p指向的字符和ch相等时,将str所指向的字符变为ch,然后再++对应这里也就是先变为r然后变为s,str++表示str指向下一个字符。这里的str一开始是指向program中的p字符,然后当p指针指向r字符时,str还是指向p字符,接着str将p字符改为r,然后又++改为s。接着p指针继续向下移动,一直到第二个r,然而此时的str是指向program中的第二个元素也就是r,然后重复和之前一样的步骤变为s。最后跳出循环后,*str='\0';表示截断。
哦,还有就是你第一个程序写错了,scanf函数要的是指针,不是scanf("%c",char_c);这样的。char_c是个变量名,应该scanf("%c",&char_c);
That'all
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询