CString :: find ...迭代使用问题?

时间:2013-09-10 18:32:06

标签: c++ visual-studio-2010 mfc find

我正在使用CString搜索文本块...这是我的代码:

// locate file name in dir listing
in = *buf;
i = in.Find("DOWNLD  .DAT  ");// find start of name, two spaces (0x20) as delim
                    // size of search text here is 14
if (i == -1) return 0;

j = in.Find(' ',i);// now find next space char *after* file size... 
        // why don't I have to add to i here? There are spaces in my search string.

if (j == -1) return 0;

fileSize = in.Mid((i+14),j-i);// extract file size string, note indexing past found string

return atoi(fileSize.GetBuffer());

以下是MSDN对find的返回值的看法: “回报价值 此CString对象中第一个字符的从零开始的索引与请求的子字符串匹配;如果找不到子字符串或字符,则为-1。“

现在我读这篇文章的方式,我必须在进行另一次查找之前索引我找到的字符串...但是它的实际工作方式,我使用之前返回的'i'作为新搜索的开始位置。我在我的程序的其他地方使用它,我必须索引它(例如,当使用:: mid()时)...我想知道为什么会发生这种情况,如果是设计或错误。原始字符串可能很大;我已经看到它靠近300座了......这是问题吗?

2 个答案:

答案 0 :(得分:0)

您的第二个Find调用会在“DOWNLD”之后找到空格,而不是“.DAT”之后的空格。您希望在第二次i调用之前增加Find,以便它引用第一个字符过去您的第一个调用搜索的字符串。

答案 1 :(得分:0)

所以我没有在CString中找到错误......我的代码出错了。这是改变的代码:

    j = in.Find(' ',i+14);// index past searched string 

if (j == -1) return 0;

fileSize = in.Mid((i+14),j-i-14);// note -14 added

return atoi(fileSize.GetBuffer());

中间的失踪-14令我感到困惑......结果弦已经过去了14,并且错过了感兴趣的部分。为什么我的原始修复工作?我想是巧合。

感谢您的帮助!