读书人

删除字符串中最左边的指定字符串高手

发布时间: 2012-03-27 13:44:24 作者: rapoo

删除字符串中最左边的指定字符串,高手看看我这儿的问题
我要做的是,删除字符串中最左边的指定字符串,如:源字符串是"asdfasds",指定字符串是"asd",用以下delleft函数后则得到"fasds",若指定字符串是"sd",就不删除,得到的还是"asdfasds"。

C/C++ code
void delleft(char *szString, char *szSubString){    char *pSrc = szString,*pDes = szString,*pSub,*p;    if((szString == NULL)||(szSubString == NULL))        return;    if(*szString != *szSubString)        return;    p = pSrc;    pSub = szSubString;    while(*p != '\0' && *p == *pSub)    {        p ++;        pSub ++;    }    if(*pSub == '\0')//在这里我已经得到了想要的结果,如何修改源字符串啊?    {        while(*p)            *pDes++ = *p++;    }

我这儿的问题是:在if(*pSub == '\0'),我得到了p指针,这里已经是我想要的结果啦,我如何将其传出啊!
以下是我的main函数,不打算修改了。
C/C++ code
void main(){    char str[50] = "s";//赋初值    char sub[50] = "s";    cout<<"input a string:";    cin>>str;    cout<<"input what you want to delete:";    cin>>sub;    delleft(str,sub);    cout<<"\ndelete:"<<str<<endl;}


[解决办法]
按照你的意思,你的删除函数修改如下:

C/C++ code
void delleft(char *szString, char *szSubString){    char *pSub,*p;    if((szString == NULL)||(szSubString == NULL))        return;        p = szString;    int j,k;   for(int i = 0; p[i]; ++i)   {       pSub = szSubString;       if(pSub[0] == p[i])       {           for(j = 0, k = i;pSub[j]; ++j,++k)           {               if(pSub[j] != p[k])                   break;           }           if(pSub[j] == '\0')           {               while(p[k])               {                   p[i++] = p[k++];               }               p[i] = p[k];               break;           }       }   }} 

读书人网 >C++

热点推荐