将三个文本文件组合成一个文本文件,形成一个句子C++

Combining three text files into one text file forming a sentence C++

本文关键字:一个 文件 文本 句子 C++ 组合 三个      更新时间:2023-10-16

我正试图使用Microsoft Visual Studio 2013在C++中创建一个程序。该程序的主要目的是读取三个不同的文件(标题1、标题2和标题3),并将它们放在一起形成一个文件,并在输出文件中创建一个句子。我已经找到了一个可以使用的函数,但这个函数只读取并打印3个文件到控制台窗口上。当我尝试将cout语句更改为outfile时,我创建的outfile为空。。。我不知道该做什么,也不知道如何构建代码。

#include<fstream>
#include<iostream>
#include<cstdlib>
using namespace std;
void readingFile(string[], ifstream &); //Funtion Prototype
int main()
{
string header1[50], header2[50], header3[50]; //Declaring array with 50 elements
int size1, size2, size3;
ifstream Fin, Fin2, Fin3;
ofstream Fout;
Fin.open("Headlines1.txt");   //Reading from these 3 files.
Fin2.open("Headlines2.txt");
Fin3.open("Headlines3.txt");
if (!Fin || !Fin2 || !Fin3)    //Checking for unsuccessful open
{
cout << "Input file opening failed.n";
cin.ignore();
return 1;
}
Fout.open("testingHeadlines.txt");  //Used for unsuccessful opening output
if (!Fout)
{
cout << "Output file opening failed.n";
cin.ignore();
return 2;
}
cout << "Building.... Editing....n" << endl;
cin.ignore();
cout << "Headlines file 1 below:n" << endl;
readingFile(header1, Fin);  //Function call
cout << endl << endl;
cout << "Headlines file 2 below:n" << endl;
readingFile(header2, Fin2); //Function call
cout << endl << endl;
cout << "Headlines file 3 below:n" << endl;
readingFile(header3, Fin3); //Function call
cout << endl << endl;
cin.ignore();
return 0;
}
//the function 'readingFile' 
//Pre-conditions: Reads the contents from the files of Headlines1,2,and 3
//Post-conditions: Prints out the contents.
void readingFile(string[], ifstream &infile)
{   
char next;
infile.get(next);
while (!infile.eof())  //Reading until EndOfFile
{
cout << next;    //Problem is here?? I would think.
infile.get(next);
}
} 

我只是不确定我说的"问题在这里??"是否就是问题所在。每次我将cout更改为outfile(我知道,我必须更改函数头中的参数)时,我打开outfile,文件都是空白的。

所有的文件都包含随机的单词/短语,当它们放在一起时就会组成一个句子。例如,标题1包含'***詹妮弗女王*'**标题2包含'***做了脑部手术*'**标题3包含吃了30个墨西哥胡椒后的******,组合在一起时,应读作詹妮弗女王吃了30根墨西哥胡椒后进行了脑部手术'但文件中包含的单词/短语比我刚才在示例中列出的要多。

当我运行上面的程序时,我可以读取所有三个标题文件,但它们是以自上而下的形式打印的。例如,我在控制台屏幕上的输出是:

皇后

Jennifer

做了脑部手术

吃了30个墨西哥胡椒后

问题:让我的标题从左到右阅读。

将它们放入输出文件,而不是控制台屏幕。

请帮忙。

您可以替换此。。。

void readingFile(string[], ifstream &infile)
{   
char next;
infile.get(next);
while (!infile.eof())  //Reading until EndOfFile
{
cout << next;    //Problem is here?? I would think.
infile.get(next);
}
} 

以及那里的呼叫,例如…

readingFile(header1, Fin);

用这个。。。

void readingFile(ifstream& infile, ofstream& fout)
{   
char next;
while (infile.get(next))  //Reading until EndOfFile or error
if (next != 'n') // if not newline
fout << next;    // stream to file
} 

并调用…

readingFile(Fin, Fout);

通过这种方式,readingFile被告知在哪里写入输出,并过滤掉导致输出出现在不同行上的换行符。

这样就可以了。

#include <fstream>
#include <string>
int main() {
// Open the three files.
std::ifstream file_1("Headlines1.txt");
std::ifstream file_2("Headlines2.txt");
std::ifstream file_3("Headlines3.txt");
// Combine into one string.
std::string content;
content += std::string(std::istreambuf_iterator<char>(file_1),
std::istreambuf_iterator<char>());
content += std::string(std::istreambuf_iterator<char>(file_2),
std::istreambuf_iterator<char>());
content += std::string(std::istreambuf_iterator<char>(file_3),
std::istreambuf_iterator<char>());
// Output the string into a single file.
std::ofstream output_file("testingHeadlines.txt");
output_file << content;
}

我不确定你想对文件之间的间距做些什么,但这对你来说应该不太难微调这个代码。

您的输出是这样的一个可能原因是您在infile.get(next)中使用的std::ifstream::get()是一种非格式化的读取方法,这意味着默认情况下它不会跳过空白和换行符n。因此,您需要检查next值是否是类似以下的换行符:

if(next == 'n') continue ;

然后将其传递给CCD_ 8。因此,您将跳过在控制台屏幕中打印新行。

相关文章: