首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

看看这个小程序有有关问题没?删除字符串里指定字符

2012-02-28 
看看这个小程序有问题没?删除字符串里指定字符#includestring.h#includestdio.hchar*fun(char*s,charc

看看这个小程序有问题没?删除字符串里指定字符
#include   <string.h>
#include   <stdio.h>
char       *fun(char*s,char       c)      
{      
int       i;      
char       *p=s;      
char       *ppPtr=p;      
for       (;   *s!= '\0 ';   s++)      
{      
if(*s!=c)      
*p++=*s;      
}      
*p= '\0 ';      
return   ppPtr;      
}      
int       main()      
{      
char   szTemp[20]= "Hello,world ";      
char   *pStr;  
pStr=szTemp;
printf( "Init   str=%s\n ",pStr);
pStr=   fun(szTemp,   'H ');      
printf( "str   =   %s\n ",pStr);      
return       0;      
}

昨晚去面试,要写一个删除字符串里的指定字符,没做对。。
后来再网上找到这个,在VC6.0里面编译运行成功。。。
但是有点疑问:
在函数   fun中
定义指针:char       *ppPtr=p;      
在函数末尾居然用retur返回了这个指针?
个人觉得这个指针变量分配内存在践区,在函数运行完的时候内存应该被销毁了,这里用return   返回指针应该有问题吧?
请大家讨论和指点下!

[解决办法]
木有问题。

返回指针这件事不会产生问题。产生问题的代码是返回指向临时数据(如函数内定义的auto变量、数组)的指针。不要混淆了。
[解决办法]


没问题;
关键是你所有的指针都是指向 "Hello,world "这个字符串变量.
当return ppPtr时,实际上是返回的 "Hello,world "的地址,ppPtr这个变量值在pStr= fun(szTemp, 'H '); 这一句结束前都是有效的.
[解决办法]
我以前在面试的时候写过一个函数,跟这个差不多的。
我就是直接将后面的字符前移,最麻烦的就是往前移多少。这样不需要在另外开辟存储区域,来掉用strcpy & strcat了,当时拿手写 还是有点不适应。 但后来还是搞定了。 不过就是公司太恶心。开的薪水太恶心了
[解决办法]
char* del(char* str,char c)
{
assert(str != NULL);
char* p = str;
char* temp = new char;
char* final = temp;
while (*p != '\0 ')
{
if (*p != c)
{
*temp++ = *p++;
}
else
{
p++;
}

}
*temp = '\0 ';
return final;
}

热点排行