我现在有一串从文本读出的CString strtmp="[0]xx,0,dwon,stop,line,,ok,[1]yy,1,up,go,rect,,ok,[2]zz,3,left,stop,round,,ok,[3]??,2,right,go,line,,no,";
还有一很多个将要方这些东西的数组CString a[],b[],c[],d[],e[],f[],g[],h[]
现在需要把从文本读到的字符串以","和"["分割开分别放到这8个数组中,比如
a[]={[0],[1],[2],[3]};
b[]={xx,yy,zz,??};
c[]={0,1,3,2};
后面依次类推,请会做的大大写一下详细代码,最好有注释,谢谢咯

解决方案 »

  1.   

    给个自写的split函数你:
    void  Split(CStringArray* csa,TCHAR tSplitChar,CString csFullString) 

      CString csSplit; 
      
      csa->RemoveAll(); 
      for(int i = 0; AfxExtractSubString(csSplit, csFullString, i, tSplitChar); i++) 
      csa->Add(csSplit); 
    }
      

  2.   

    先按[拆分到CStringArray;
    再逐条按逗号拆分。比较简单。你也可以从左到右,逐字符处理
      

  3.   

    原理就是逐个查找判断,可以用strtok方法来查找。找到后再存到数组中去。。
      

  4.   

    CStringArray  还有find ,lefe,right,mid 这几个字符串函数就够用了。多看看msdn。自己解决也是一个提高!!!
      

  5.   

    源有问题,这种源再强的拆分算法都容易出错
    简单的做法是换行分隔
    [code=INIFile]
    [0]xx,0,dwon,stop,line,,ok,
    [1]yy,1,up,go,rect,,ok,
    [2]zz,3,left,stop,round,,ok,
    [3]??,2,right,go,line,,no,
    [/code]
    科学的做法是XML<Content>
    <add key="0" v1="xx" v2="0" v3="dwon" v4="stop" v5="line" v6="" v7="ok"/>
    <add key="1" v1="yy" v2="1" v3="up" v4="go" v5="rect" v6="" v7="ok"/>
    </Content>时尚的做法用json{data: 
    [
     {key:0, v1:'xx', v2:0, v3:'down', v4:'stop', v5:'line', v6=, v7='ok'},
     {key:1, v1:'yy', v2:1, v3:'up', v4:'go', v5:'rect', v6=, v7='ok'},
    ]
    }
      

  6.   

    //函数功能:从源字符串中获得子串,根据指定的分隔符,其中源字符串是“字段信息+分隔符”的格式char *GetSubStr( char *azp_SourceStr, /*源字串指针*/
    int  ai_Index, /*分隔符序号*/
    char ai_Char, /*分隔符*/
    char *azp_TargetStr /*目标串指针*/
    )
    {
    int li_Index1,li_Index2=0,li_StrLen;
    int li_Flag = 0;

    azp_TargetStr[0] = 0;
    li_StrLen = strlen( azp_SourceStr );
    if  ( ai_Index < 0 || li_StrLen == 0 )
    { /*返回空串*/
    return( azp_TargetStr );
    }

    for ( li_Index1 = 0; li_Index1 < li_StrLen; li_Index1++ )
    {
    if  (azp_SourceStr[ li_Index1 ] == 0x0A)
    {
    break;
    }

    /* 分隔符的索引序号为0的情况,或者是通过查找找到了要取值字段左边的分隔符号,
       来取从这个字段最左边的这个分隔符号到这个字段最右边的分隔符号之间的字符串 */
    if  ( ai_Index == 0 && azp_SourceStr[ li_Index1 ] != ai_Char )
    {
    azp_TargetStr[ li_Index2++ ] = azp_SourceStr[ li_Index1 ];
    }

    /* 定位要取值字段的最左边的这个分隔符号 */
    if  ( azp_SourceStr[ li_Index1 ] == ai_Char )
    {
    ai_Index--;
    }


    if  ( ai_Index < 0 )
    {
    break;
    }
    }
    azp_TargetStr[ li_Index2 ] = 0;
    return( azp_TargetStr );
    }
    在把你要得到的字符,放到你想要放的数组中就行了,这个就不用我写了吧,呵呵