在delphi中,我们很方便的将一个字符串中的所有的某个子串更改成另外一个串。
例如:要将"fanningjiefanningjie"中的所有"nn"修改成"aabbcc"的话,我们可以这样写
a="fanningjiefanningjie";
b="nn";
c="aabbcc";
stringreplace(a,b,c,[rfreplaceall]);//返回的结果就是将a中的所有"nn"修改成"aabbcc"的"faaabbccingjiefaaabbccingjie"
但是在c++中我不会写一个类似的函数,也不知道有没有类似的函数?
我希望写的函数的格式是:
char *stringreplace
(char *sourcestring,char *oldsubstring,char *newsubstring,BOOL replaceall)
请大家帮忙.
例如:要将"fanningjiefanningjie"中的所有"nn"修改成"aabbcc"的话,我们可以这样写
a="fanningjiefanningjie";
b="nn";
c="aabbcc";
stringreplace(a,b,c,[rfreplaceall]);//返回的结果就是将a中的所有"nn"修改成"aabbcc"的"faaabbccingjiefaaabbccingjie"
但是在c++中我不会写一个类似的函数,也不知道有没有类似的函数?
我希望写的函数的格式是:
char *stringreplace
(char *sourcestring,char *oldsubstring,char *newsubstring,BOOL replaceall)
请大家帮忙.
那你需要调用
CString s;
s = "aaaoldaaaold";
s.Replace("old","new");Result: = aaanewaaanew;
继承标准库的STRING类
不使用类也可以
第一步是查找有相应的函数
第二步删掉找到的那个串
最后插入替换的串
都有现成的函数
{
int OldLen, NewLen;
char *p, *q;
if(NULL == (p = strstr(Str, OldStr)))
return Str;
OldLen = strlen(OldStr);
NewLen = strlen(NewStr);
if ((strlen(Str) + NewLen - OldLen + 1) > BufSiz)
return NULL;
memmove(q = p+NewLen, p+OldLen, strlen(p+OldLen)+1);
memcpy(p, NewStr, NewLen);
return q;
}
{
int OldLen, NewLen;
char *p, *q;
if(NULL == (p = strstr(Str, OldStr)))
return Str;
OldLen = strlen(OldStr);
NewLen = strlen(NewStr);
if ((strlen(Str) + NewLen - OldLen + 1) > BufSiz)
return NULL;
memmove(q = p+NewLen, p+OldLen, strlen(p+OldLen)+1);
memcpy(p, NewStr, NewLen);
return q;
}void CSizeDlg::OnButton1()
{
// TODO: Add your control notification handler code here
char a[ 200 ] = "hello, world!";
char *b = "world";
char *c = "WWWWorld!!";
strrepl( a, 200, b, c );
AfxMessageBox( a );
}
{
int OldLen, NewLen;
char *p, *q;
if(NULL == (p = strstr(Str, OldStr)))
return Str;
OldLen = strlen(OldStr);
NewLen = strlen(NewStr);
if ((strlen(Str) + NewLen - OldLen + 1) > BufSiz)
return NULL;
memmove(q = p+NewLen, p+OldLen, strlen(p+OldLen)+1);
memcpy(p, NewStr, NewLen);
return q;
}
char * myreplace( char *buf, int BufSiz, char *olds, char *news )
{
char *p = buf;
int oldlen = -1, newlen = 0;
do
{
if( oldlen != newlen )
{
oldlen = newlen;
newlen = strlen( strrepl( buf, BufSiz, olds, news ) );
}
else
break;
}while( TRUE );
return p;
}void CSizeDlg::OnButton1()
{
char a[ 200 ] = "hello, world! world!";
char *b = "world";
char *c = "WWWWorld!!";
myreplace( a, 200, b, c );
AfxMessageBox( a );
}
您的思路很好很多。谢谢您在我的多个帖子中多次帮助。