在c ++中搜索外部文件中的单词

时间:2015-09-06 16:22:00

标签: c++ file

我有以下问题: 我有一个文本文件file.txt,其中包含几行,我想在其中搜索特定的单词。我要搜索的单词位于第二个文件input.txt中,可能如下所示:

Paul
Matt
Joseph

在第一个循环中,我想搜索保罗,第二个是Matt,第三个是Joseph。每当我在文本文件的一行中找到特定名称时,我想输出该行并继续搜索文本文件的所有后续行。

目前我的代码如下:

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{
ifstream fs("input.txt");
ifstream stream1("file.txt");
ofstream stream2("output.txt");
string Name;
string line;


while (fs >> Name)
{
    while (std::getline(stream1, line))
    {
        if ((line.find(Name) != string::npos))

        {
            stream2 << Name << line << endl;
        }
        else
            stream2 << "Unable to find name in line" << endl;;
    }   
}


fs.close();
stream1.close();
stream2.close();

return EXIT_SUCCESS;
}

我的代码存在的问题是它会搜索第一个单词,但会在first loop之后停止。它不会搜索第二个单词("e.g. Matt").

也许有人知道我为错误做了些什么。

非常感谢: - )

2 个答案:

答案 0 :(得分:0)

内循环完成后,您就在stream1文件的末尾。您需要将读取位置“倒回”到开头。这可以通过seeking到第一个位置来完成。

答案 1 :(得分:0)

当您open input.txt时,请在name = Paul时阅读此文件中的所有元素。阅读完全文后,cursor将位于文件input.txt的末尾。这就是为什么,当你再次搜索马特时,你找不到任何东西。

因此,您应该始终从input.txt开始搜索。因此,您可以这样做以打开此文件,然后光标将首先站立。

只需简单的改变:

while (fs >> Name)
{
    ifstream stream1("file.txt");
    while (std::getline(stream1, line))
    {
        if ((line.find(Name) != string::npos))

        {
            stream2 << Name << line << endl;
        }
        else
            stream2 << "Unable to find name in line" << endl;;
    }
    stream1.close();
}