代码如下,代码功能就是将一串;号隔开的string提取出来:
                   MarkNum为已经得到的;号个数
pMark = 0;
for(i=0;i<=MarkNum;i++)
{
pMark = titleString.Find(';',pMark);
if(-1 == pMark)
{
m_HideString.Add(titleString);
}
else
{
m_HideString.Add(titleString.Left(pMark));
titleString = titleString.Right(titleString.GetLength() - pMark -1);
}
}当字串如下时返回正确:
aa;bbbb;ccccc
而当字串中前面的string长度比后面的长时,返回出错,
ccccc;aa;bbbb
返回取得第一个string是 ccccc,之后titleString 重置为aa;bbbb
而对aa;bbbb
pMark = titleString.Find(';',pMark); 返回pMark = -1 找不到第二个;号
请问什么地方出错了。当然我能用其他方法譬如不重置titleString,而改变pMark的方法来取得;位置。只是对上述代码出现的问题不理解。

解决方案 »

  1.   

    pMark = titleString.Find(';',0); 
      

  2.   

    很简单,帮你写一个:就拿我的举例子: CString aa = “liuyong,catvgis,sa,sa,”; int iStart = 0, iEnd;
    iEnd   = aa.Find(',',iStart);
    server = aa.Mid(iStart, iEnd-iStart);
    iStart = iEnd+1;
    iEnd   = aa.Find(',',iStart);
    dbname = aa.Mid(iStart, iEnd-iStart);
    iStart = iEnd+1;
    iEnd   = aa.Find(',',iStart);
    pwd    = aa.Mid(iStart, iEnd-iStart);
    iStart = iEnd+1;
    iEnd   = aa.GetLength();
    user   = aa.Mid(iStart, iEnd-iStart);
    结果:
    server = liuyong
    dbname = catvgis
    user = sa
    psw = sa
      

  3.   

    pMark = titleString.Find(';',pMark); 是不对的,是从当前字符串pMark开始查找的!所以,你这个应该用pMark = titleString.Find(';',0); 从0开始查找!
      

  4.   

    别忘了定义:要给的字符串变量(server,dbname ,user ,psw )如果你的最初的字符串是通过文件的形式读取的话,说下,我再帮你写一个完整的!!!
      

  5.   

    MFC未公开的函数:AfxExtractSubString。功能:分割字符串。http://www.cnblogs.com/aoyihuashao/archive/2009/12/17/1626218.html