C 文本文档

C++ text document

本文关键字:文档 文本      更新时间:2023-10-16

这可能是一个简单的答案,我希望很容易理解我的问题。我有一个文本文档,有很多行和几段

有没有办法将所有线路合并为一条线,而无需手动进行操作?我之所以问这个问题,是因为我要说的是在文档中搜索一个只有一个段落的特定单词。但是我的程序在做什么奇怪的事情,而是给我这样的输出:

paragraph1:accepted
paragraph2:accepted
paragraph3:accepted
paragraph4:accepted
paragraph5:accepted
paragraph6:accepted
paragraph7:accepted
paragraph8:accepted
paragraph9:accepted
paragraph10:accepted

这是读取我的文档的代码

    void processParagraph(std::string &paragraph, size_t paragraphNumber)
   {
    ifstream input;
    input.open("data.txt"); //opens the text file with the documents
    if (input.fail()) //if the file doesn't open
     {
      cout << "file not found" << endl;
      return;
     }
    if (isMyWordThere(paragraph)) //if the word im looking its there 
     cout << "paragraph " << paragraphNumber << ": accepted" << endl;
     else // if the word its not there 
      cout << "paragraph " << paragraphNumber << ": not accepted" << endl;
      paragraph.clear(); // reset the paragraph to handle the next one.

    std::string line;
    std::string paragraph;
    size_t paragraphNumber = 0;
    while ( getline(input, line) ) // read a LINE
     {
      if ( !line.empty() ) // paragraph not finished
       {
        paragraph.append("n").append(line);
       }
     else // paragraph finished, because we found an empty line
      {
        ++paragraphNumber;
        processParagraph(paragraph, paragraphNumber);
      }
     }
     if ( !paragraph.empty() )
      {
       processParagraph(paragraph, paragraphNumber);
      }
   }

它可以将所有线路合并为一条线,或者是一种可以更改代码的方式,以免计算行?

输入文件看起来像这样:(我在寻找" Hello")

hello world
hello everyone
hello All

输出应该看起来像这样

paragraph 1: accepted

但是我得到的是

paragraph 1: accepted
paragraph 2: accepted
paragraph 3: accepted

您正在处理 lines 不是段落

这将做到这一点:

void processParagraph(std::string &paragraph, size_t paragraphNumber)
{
    if (isMyWordThere(paragraph)) //if the word im looking its there 
        std::cout << "paragraph " << paragraphNumber << ": accepted" << std::endl;
    else // if the word its not there 
        std::cout << "paragraph " << paragraphNumber << ": not accepted" << std::endl;
    paragraph.clear(); // reset the paragraph to handle the next one.
}
void processFile(std::string filename)
{
    std::ifstream input;
    input.open(filename.c_str()); // open file
    std::string line;
    std::string paragraph;
    size_t paragraphNumber = 0;
    while ( getline(input, line) ) // read a LINE
    {
       if ( !line.empty() ) // paragraph not finished
       {
           paragraph.append("n").append(line);
       }
       else // paragraph finished, because we found an empty line
       {
           ++paragraphNumber;
           processParagraph(paragraph, paragraphNumber);
       }
    }
    if ( !paragraph.empty() )
    {
        processParagraph(paragraph, paragraphNumber);
    }
}

似乎您想将此功能分为单独的功能,该功能可以使用文件名或开放文件流。然后为每个文件调用此功能一次。