我有以下问题:
我有一个文本文件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").
也许有人知道我为错误做了些什么。
非常感谢: - )
答案 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();
}