string :: std find方法总是找到一个字符,即使它不在字符串

时间:2015-05-15 03:53:17

标签: c++ string pointers visual-c++ string-parsing

我正在为学校做一个项目,我们正在通过从文本文件传入的字符串进行解析。但是,我遇到了string.find的问题。当我运行此代码时:

string theFile;
while (inFile)
{
    inFile.getline(line, 512);
    theFile = line;
    bool parsing = true;
    while (parsing){
        Choice *newChoice = new Choice;
        if (theFile.find("|")!= -1) {
            newChoice->lines = theFile.substr(theFile.find("%") + 1, theFile.find("|") - 1); 
            theFile.erase(0, theFile.find("|") + 2); 
            tempNPC->choices.push_back(newChoice); 
        }
        else
           parsing = false;

输入看起来像这样:

| d1% stuff | d2% more stuff |

我的问题:if语句永远不会出错。即使一旦theFile为空,它仍然运行代码,因此我得到一个越界错误。知道为什么找到(“|”)不起作用吗?

*编辑以添加我从文件中获取字符串的方式

1 个答案:

答案 0 :(得分:3)

您可能希望查看一些documentation,以便了解std::string::find的返回值实际意味着什么。具体来说,如果您不确定某个值是否存在,则应在使用前将其与npos进行比较,而不是" -1"。在您输入的内容耗尽后继续运行的问题可能最好在您不会显示的输入代码中得到解决,而不是尝试解析某些string可能会或可能不会是实际的输入

更新:正如我在下面对vsoftco的评论中推测的那样,你的输入逻辑被打破了。使用此:

while (getline(inFile, theFile))
    ...