【发布时间】:2018-09-25 01:52:15
【问题描述】:
为了学习,我正在尝试用 CStrings 实现我自己的简单 Tokenize 函数。我目前有这个文件:
11111
22222
(ENDWPT)
222222
333333
(ENDWPT)
6060606
ggggggg
hhhhhhh
(ENDWPT)
iiiiiii
jjjjjjj
kkkkkkk
lllllll
mmmmmmm
nnnnnnn
我想用分隔符 (ENDWPT) 对其进行标记。 我编写了以下函数,它试图找到分隔符位置,然后添加分隔符长度并将文本提取到该位置。之后,更新使用的计数器,以便下次调用该函数时,它开始从前一个索引中搜索分隔符。函数如下所示:
bool MyTokenize(CString strText, CString& strOut, int& iCount)
{
CString strDelimiter = L"(ENDWPT)";
int iIndex = strText.Find(strDelimiter, iCount);
if (iIndex != -1)
{
iIndex += strDelimiter.GetLength();
strOut = strText.Mid(iCount, iIndex);
iCount = iIndex;
return true;
}
return false;
}
并且被这样称呼:
int nCount = 0;
while ((MyTokenize(strText, strToken, nCount)) == true)
{
// Handle tokenized strings here
}
现在,该函数以错误的方式拆分字符串,我认为这是因为Find() 可能返回了错误的索引。我认为它应该返回 12,但它实际上返回 14??。
我的想法用完了,如果有人能解决这个问题,我将不胜感激。
【问题讨论】:
标签: c++11 visual-c++ mfc c-strings