新手求助:c语言,用返回值为指针的函数,编写一个在某字符串中删除某个字符的函数。

c语言,用返回值为指针的函数,编写一个在某字符串中删除某个字符的函数。
这是我编写的,但执行后没有实现功能,帮我看看哪里出错了,谢谢了!返回值为指针的函数不会用。
#include <stdio.h>
char *char_search(char *str2,char c)
{
char *p=str2,*q;
for (;*p!='\0';p++)
{if (*p==c)
{q=p;
for (;*q!='\0';q++)
{*q=*(q+1);}
p--;
}
return str2;
}
}
int main(void)
{
char str[200],c;
printf("请输入一个字符串\n");
gets(str);
printf("请输入需要删除的字符\n");
c=getchar();
printf("%s\n",(char_search(str,c)));
return 0;
}

你这个程序第一个主要问题在你没弄懂指针的含义,,因为*p代表着指针p所指向的空间,而p才代表着储存空间地址,同理str2这个数组名代表着数组第一个元素的位置,所以你在定义p时应该让p=str2;第二个问题是你应该把return str2;放在最外面,你把这个放在for循环里面的话那么遇到它就跳出了这个函数,等于for循环只进行一次。我改了一下,你可以看看。
#include <stdio.h>
char *char_search(char *str2,char c);
int main(void)
{
char str[200],c;
printf("请输入一个字符串\n");
gets(str);
printf("请输入需要删除的字符\n");
c=getchar();
printf("%s\n",(char_search(str,c)));
system("pause");
}

char *char_search(char *str2,char c)
{
char *p,*q;
p=str2;
for (;*p!='\0';p++)
{if (*p==c)
{q=p;
for (;*q!='\0';q++)
{*q=*(q+1);}
p--;
}
}
return str2;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-29

你改变后的字符串未用'\0'结束,所以是不对的。在最后一定要加字符串结束符,否则得不到你想要的。


#include <stdio.h>
char *char_search(char *str2,char c)//这样改改,效率更高。
{
/*两个指针互相赋值,当遇到c时,p指针跳过它*/
 char *p,*q;
 for(p=q=str2;*q!='\0';q++)
 {
 *p=*q;
 if(*q!=c)
 {
p++;
 }
 }
 *p='\0';
 return str2; 
}
int main(void)
{
 char str[200],c;
 printf("请输入一个字符串\n");
 gets(str);
 printf("请输入需要删除的字符\n");
 c=getchar();
 printf("%s\n",(char_search(str,c)));
 return 0;
}

追问

感谢你的细心解答,您的方法要比我的好。但我那个循环语句中应该已经将'\0'补上了吧(当q指向最后一个元素时*(q+1)正好等于'\0')。不过依然感谢您的回答。可惜最佳答案只能给一个,不好意思。

追答

当q指向最后一个元素时*(q+1)正好等于'\0',就退出循环了,并没有把'\0'赋给p

本回答被网友采纳
第2个回答  2014-01-29
你的子函数的return应该放在循环结束之后。如果放到循环中,那么第一次循环就会执行return跳出子程序。所以没实现。
char *char_search(char *str2,char c)
{
char *p=str2,*q;
for (;*p!='\0';p++)
{if (*p==c)
{q=p;
for (;*q!='\0';q++)
{*q=*(q+1);}
p--;
}
}
return str2;
}追问

你的回答完全正确!谢谢!可惜分只能给一个人,不好意思

第3个回答  2014-01-29
用字符指针作函数参数即可

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网