在文本文档中查找特定行

时间:2016-08-04 05:21:51

标签: c++

我想创建一个小程序来理解我需要的东西。

此代码可以将文字写入文本文档,按顺序在先前的新行中,并在重新启动程序后保留行。

现在在向文件中添加新单词或短语之前,我想查找文档中是否已存在该单词,如果存在,则不要添加,但在输出中存在相同的单词或短语,请从文件,这里的主要内容是以某种方式也找到当前存在的行之下或之上的行。例如:如果存在行索引为3,我希望看到+1行4或-1行2.如果文本文档中不存在新单词,则添加它。

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

using namespace std;

std::ofstream outfile("doc.txt", std::ios_base::app); 

int main()
{

    std::string t;

    for (int i = 0; i < 10; i++)
    {
        cout << "Add new phrase: " << endl;

        std::getline(std::cin, t); 

        cout << t << endl;

        outfile << t << std::endl;

    }

    _getch();
    return 0;
}

编辑:

using namespace std;

std::ofstream outfile("doc.txt", std::ios_base::app);

int main()
{

    int length = 100;

    std::ifstream infile("doc.txt", std::ifstream::in);
    infile.seekg(0, infile.end);
    size_t len = infile.tellg();
    infile.seekg(0, infile.beg);
    char *buf = new char[len];
    infile.read(buf, length);
    infile.close();
    std::string writtenStr(reinterpret_cast<const char *>(buf), len);

    std::string t;

    for (int i = 0; i < 10; i++)
    {
        std::getline(std::cin, t);

        if (writtenStr.find(t) != std::string::npos)
        {
            cout << "Line [" << t << "] exist." << endl;
        }
        else
        {
            cout << "Line [" << t << "] saved." << endl;
            writtenStr += t;
            outfile << t << std::endl;
        }
    }
    _getch();
    return 0;
}

1 个答案:

答案 0 :(得分:0)

我在程序启动时将文件读入字符串。然后,每次我想添加一个新单词时检查短语的字符串。如果字符串不包含该短语,请将其添加到字符串和文件中,并根据需要将其添加到您选择的分隔符中。例如:

int main()
{
    // Read existing file into a string
    std::ifstream infile("doc.txt", std::ifstream::in);
    infile.seekg(0, infile.end);
    size_t len = infile.tellg();
    infile.seekg(0, infile.beg);
    char *buf = new char[len];
    infile.read(buf,length);
    infile.close();
    std::string writtenStr(reinterpret_cast<const char *>(buf), len);

    // Open file for output
    std::ofstream outfile("doc.txt", std::ios_base::app); 
    std::string t;

    for (int i = 0; i < 10; i++)
    {
        // Get new phrase
        std::getline(std::cin, t); 
        // Check if phrase is already in file;
        if (writtenStr.find(t) == std::string::npos) 
        {
            cout << "Could not add new phrase: " << endl;
            cout << t << endl;
            cout << "Phrase already exists in file." << endl;
        } 
        else
        {
            cout << "Add new phrase: " << endl;
            cout << t << endl;
            writtenStr += t;
            outfile << t << std::endl;
        }
    }
    _getch();
    return 0;
}