cstring temp = “[THR] THR=143 [Phase1] 档位=1 最大=95 标准时间=3 [Phase2] 档位=4 最大=130 标准时间=8 [Phase3] 档位=5 最大=140 标准时间=16 [Phase4] 档位=2 最大=95 标准时间=3” 
我怎么得到 THR 后面的值?  以及挡位 最大后面的各个值?
最近字符串解析我都搞不定,大家帮忙

解决方案 »

  1.   

    字符串固定么?挺复杂的....,是不是要用IsDBCSLeadByte判断?
      

  2.   

    如果这个结构固定很好说,无非就是查找,如果不固定就难了。象这样的为什么不用XML?
      

  3.   

    CString temp = "[THR] THR=143 [Phase1] 档位=1 最大=95 标准时间=3 [Phase2] 档位=4 最大=130 标准时间=8 [Phase3] 档位=5 最大=140 标准时间=16 [Phase4] 档位=2 最大=95 标准时间=3";
    int t = temp.Find("THR="); CString s = temp.Mid(t+4, temp.Find(' ', t)-t-4);

    int tt = atoi(s.GetBuffer(0));挡位 最大后面的各个值?
    =========================
    类推。
      

  4.   

    //每个[THR]代表的整一段结束的地方都加一个" ",
    //也就是[Phase4]里的"标准时间=3"后面加一个" "
    //每个"="和" "之间的数据都放在字符串数组中
    //"THR=143"中的143是第一个,档位=1中的1是第二个,最大=95中的95是第3个,依次类推
    //每个[THR]中有13个“=”,自己看看再去组织剩下的代码吧
    //下面的代码编译通过, strData的值如果有问题,调整下void query()
    {
             CString strData = 
    "[THR] THR=143 [Phase1] 档位=1 最大=95 标准时间=3 [Phase2] 档位=4 最大=130 标准时间=8 [Phase3] 档位=5 最大=140 标准时间=16 [Phase4] 档位=2 最大=95 标准时间=3 ";
             CStringArray strDataArr;
    CString strSpace = " "; //间隔符
    CString strQuery = "="; //搜索的字符串
    int nBeginPos = 0;
    do
    {
    nBeginPos = strData.Find(strQuery, nBeginPos);
    if (nBeginPos == -1)
    break;
    int nEndPos = strData.Find(strSpace, nBeginPos);
    if (nEndPos == -1)
    nEndPos = strData.GetLength();
    CString strValue = strData.Mid(nBeginPos+1, nEndPos-nBeginPos-1);

    nBeginPos = nEndPos;

    strDataArr.Add(strValue); }while(nBeginPos > 0);
    }
      

  5.   

    我靠,你这这不就是ini格式么
      

  6.   

    实现一个regular expression的解释器~以后所有字符串解析你就不用怕了
      

  7.   

    kimryo(Demon gate has open...) 
    有杂乱无章的空格 所以ini读取方式不行
      

  8.   

    最近也是碰到字符串的麻烦,MFC里面/0,/n都有,然后/t和空格键同时做分隔 郁闷啊~~~
      

  9.   

    AfxExtractSubString(CString &rString,LPCTSTR lpszFullString,int iSubString,TCHAR chsep);
    rString     得到的字符串
    lpszFullString    原来要分割的字符串
    iSubString        需要分割的第几段
    chsep             按照什么字符来划分
    可以按照空格划分,然后寻找“=”,等号后面的就是你要的。
      

  10.   

    这种东西用Regular Expression表示最好
      

  11.   

    如果格式固定,可以利用CStirng的一些方法。
    代码如下:int iStart=0, iEnd=0, value=0;
    iStart = 4 + temp.Find("THR=");
    iEnd = temp.Find(" ", iStart);value = atoi(temp.Mid(iStart, iEnd-iStart));//answer