比如一个字符串a="asdfgggfdadfsadasdsafd"
怎样提取第二个s之前的子串?

解决方案 »

  1.   

    去看看CString的函数,里面有个函数可以提取字符的index,好像是::find()函数。然后用一个循环就可以了
      

  2.   

    遍历,在遇到第一个S之后将S后的所有非S字符存入缓冲,当再次遇到S,则缓冲里的正是所求的.
    void(char* a,char* b)
    {
    int flag=0,i=0;
    for(;*a!='\0',a++)
    {
      if(!flag&&*a!='s')
        continue;
      if(flag&&*a!='s')
        b[i++]=*a;
        continue;
      if(flag&&a=='s')
        break;
    }
    return;
    }
      

  3.   

    void(char* a,char* b)
    {
    int flag=0,i=0;
    for(;*a!='\0',a++)
    {
      if(!flag&&*a!='s')
        continue;
      if(!flag&&*a=='s')
      {
        flag=1;
        continue;
       }
      if(flag&&*a!='s')
      {
        b[i++]=*a;
        continue;
      }
      if(flag&&a=='s')
        break;
    }
    return;
    }
      

  4.   

    晕,,我竟然做成提取第一个S后第二个S前的子串的函数了..没有看清楚,真不好意思.按你的意思,应该是
    void(char* a,char* b)
    {
    int flag=0,i=0;
    for(;*a!='\0',a++)
    {
      if(!flag&&*a!='s')
      {
        b[i++]=*a;
      }
      if(!flag&&*a=='s')
      {
         flag=1;
         b[i++]=*a;
         continue;
       }
      if(flag&&*a!='s')
        b[i++]=*a;
        continue;
      if(flag&&a=='s')
        break;
    }
    return;
    }
      

  5.   

    void(char *a,char* b)
    {
       int index=0;
       for(int i=0;*(a+i)!='\0';i++)
       {
         if(*(a+i)=='s')index++;
         if(index==2)break;
         else *(b+i)=*(a+i);
       }
       *(b+i)='\0';
    }
      

  6.   

    CString GetString()
    {
    CString a = "asdfasdfasdf";
    bool findflag = false;
    int pos = 0;
    for(int i=0;i<a.GetLength();i++)
    {
    if(a.GetAt(i) == 's')
    {
    if(!findflag)
    findflag = true;
    else
    {
    pos = i;
    break;
    }
    }
    }
    return a.Left(pos+1);
    }
      

  7.   

    我的意见是把字符串转化成std的string
    用标准模板库对字符串进行处理很方便