C ++如果文本文件包含特定单词或不包含

时间:2015-02-18 13:14:39

标签: c++

如果他/她输入的数据(字)存在于.txt文件中,我需要一些可以验证输入的内容。如果只有一个条件,我的代码就可以工作了。

if(line.find("2014-1113") != string::npos)

但是当我尝试添加其他条件时..每次运行程序时,else条件始终是输出。我不知道为什么......

我尝试进行实验,以便如果用户输入我的txt文件中不存在的单词,则会输出他/她输入的数据有问题。当我运行使用调试模式时。这是输出:

    cout << "NOT FOUND!";
    break;

直到我运行它,即使我更改单词并且它存在于我的txt文件中,仍然ELSE条件是输出..

有谁知道我的问题?谢谢!

这是我的示例txt文件:

2015-1111,Christian Karl,M
2015-1112,Joshua Evans,M
2015-1115,Jean Chloe,F
2015-1113,Shairene Traxe,F
2015-1114,Paul Howard,M

然后我的代码:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{

    ifstream  stream1("db.txt");
    string line ;

    while( std::getline( stream1, line ) )
    {
        if(line.find("2015-1113") != string::npos){ // WILL SEARCH 2015-1113 in file
            cout << line << endl;
        }
        else{
            cout << "NOT FOUND!";
            break;
        }
    }

    stream1.close();

    system("pause");
    return 0;
}

2 个答案:

答案 0 :(得分:2)

当你的代码越过第一行时,它找不到它要查找的内容,并进入else子句。然后打印“NOT FOUND”并中断(break停止while循环)。

你应该做的是这些方面:

bool found = false;
while( std::getline( stream1, line ) && !found)
{
    if(line.find("2015-1113") != string::npos){ // WILL SEARCH 2015-1113 in file
        cout << line << endl;
        found = true;
        // If you really want to use "break;" Here will be a nice place to put it. Though it is not really necessary
    }
}

if (!found)
    cout << "NOT FOUND";

答案 1 :(得分:0)

由于您的if条件位于循环内部,因此else语句将针对不包含您要搜索的内容的每一行运行。你需要做的是使用bool标志并在循环中设置它。循环结束后,检查标志并查看是否找到了该行。

bool found = false;
while(std::getline(stream1, line) && !found )
{
    if(line.find("2015-1113") != string::npos){ // WILL SEARCH 2015-1113 in file
        found = true;
    }
}

if (found)
    std::cout << "Your line was found.";