在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)
请大家帮忙.

解决方案 »

  1.   

    如果你是用mfc
    那你需要调用
    CString s;
    s = "aaaoldaaaold";
    s.Replace("old","new");Result: = aaanewaaanew;
      

  2.   

    如果要自己实现也可以。
    继承标准库的STRING类
    不使用类也可以
    第一步是查找有相应的函数
    第二步删掉找到的那个串
    最后插入替换的串
    都有现成的函数
      

  3.   

    char *strrepl(char *Str, size_t BufSiz, char *OldStr, char *NewStr)
            {
            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;
        }
      

  4.   

    char *strrepl(char *Str, size_t BufSiz, char *OldStr, char *NewStr)
    {
    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 );
    }
      

  5.   

    char *strrepl(char *Str, size_t BufSiz, char *OldStr, char *NewStr)
    {
    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 );
    }
      

  6.   

    JennyVenus() 谢谢您的多次帮助。
    您的思路很好很多。谢谢您在我的多个帖子中多次帮助。