读书人

字符串替换的有关问题!

发布时间: 2012-03-06 20:47:55 作者: rapoo

字符串替换的问题!求助!
#include <iostream>

using namespace std;

char * Replace(char *source, char *substr, char *newstr)
{
char *p = strstr(source,substr);
if(p != NULL)
{
char *result = new char [];
strncpy(result,source,p-source);
strcat(result,newstr);
char *p2;
p=p+strlen(substr); //使p相当于source
p2=strstr(p,substr); //p2为子串位置,开始循环
while(p2!=NULL)
{
strncat(result,p,p2-p);
strcat(result,newstr);
p=p2+strlen(substr); //
p2=strstr(p,substr); //
}
strcat(result,p);
return result;
}
else return source;
}
void main()
{
char source[]= "wjinwei king jinwei kk ";
char substr[]= "jinwei ";
char newstr[]= "aaa ";
char * result = Replace(source,substr,newstr);
cout < <result < <endl;
}
运行结果有乱码,我想要的结果是:waaa king aaa kk(用新串替换原字符串的所有子串)

[解决办法]
char *result = new char [];//未初始化,内容并不为空,\0并不是在最开始,是乱码的产生原因。

//加入下面的初始化结果就OK了- -;
while (*result)
{
*result++ = '\0 ';
}
strncpy(result,source,p-source);copy之后并未产生\0。
strcat(result,newstr);从result的结束位置,即未初始化内容的结束位置开始连接的


char * __cdecl strcat (
char * dst,
const char * src
)
{
char * cp = dst;

while( *cp )
cp++; /* find end of dst */

while( *cp++ = *src++ ) ; /* Copy src to end of dst */

return( dst ); /* return dst */

}

读书人网 >C++

热点推荐