C 文本文档
C++ text document
这可能是一个简单的答案,我希望很容易理解我的问题。我有一个文本文档,有很多行和几段
有没有办法将所有线路合并为一条线,而无需手动进行操作?我之所以问这个问题,是因为我要说的是在文档中搜索一个只有一个段落的特定单词。但是我的程序在做什么奇怪的事情,而是给我这样的输出:
paragraph1:accepted
paragraph2:accepted
paragraph3:accepted
paragraph4:accepted
paragraph5:accepted
paragraph6:accepted
paragraph7:accepted
paragraph8:accepted
paragraph9:accepted
paragraph10:accepted
这是读取我的文档的代码
void processParagraph(std::string ¶graph, 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 ¶graph, 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);
}
}
似乎您想将此功能分为单独的功能,该功能可以使用文件名或开放文件流。然后为每个文件调用此功能一次。
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 如何在文档文件夹中创建目录
- 当Microsoft文档仅包含 C# 示例时,如何查找 C++ 包含文件名
- 通过构造函数创建一些值并尝试添加到文档中使用 rapidjson 不起作用
- 关于类的 Python 文档 - 对C++的引用不正确
- C++/autoconf 等效于文档库要求.txt的要求是什么?
- mbed:使用 USB 文档库编译会导致错误
- C++ VISUAL STUDIO:GLFWwindow没有初始化,即使它是在文档中编写的并且以前工作过
- 使用 yaml-cpp 更新 YAML 文档的节点和值
- 在加载 MSHTML 文档之前从 MSHTML 文档中删除无效的 URL
- 如何在C++中表示JSON文档的递归对象结构?
- 如何查找 Redshift Maya API 文档?
- 如何使用值模板编写文档测试用例?
- 如何使用 Gradle DSL(领域特定语言)上的文档?
- Visual C++ Load rtf 文档在丰富编辑框中包含图像和文本
- 用于Linux C++的开放源代码库,用于将word文档转换为纯文本
- QXmlStreamReader读取空文本,文档肯定不是空的
- 如何在纯c++中从MS word文档文件中提取纯文本
- 更新Qlabel文档矩形,该矩形调用的标签不是文本标签.为什么
- 向xml文档添加xml文本结构