C++从文本文件中读取行并进行编辑

C++ read line from text file and edit

本文关键字:编辑 读取 文本 文件 C++      更新时间:2023-10-16

首先,我想为我的英语道歉。我想创建一个程序,该程序从.txt文件中读取每一行,并在前面添加@",在末尾添加"。示例:@"我喜欢苹果"。这是我到目前为止的代码,它替换了".","?"和":",但我不想要那个。

#include <iostream.h>
#include <fstream.h>
#include <string.h>
#include <values.h>
int main()
{ ifstream f;
f.open("lala.txt");
if(!f)
{                           
    cout<<"Eroare la deschiderea fisierului!"<<endl;
}
char s[100],x;
int i,n=0, k=0;
ofstream g("adinarez.txt");
f.seekg(0,ios::beg); //ne pozitionam la inceputul fisierului
while(f)
{
f.get(x);
s[k]=x;
    n++; k++;
}
    f.close();
for (i=2; i<n-1; i++)
if((s[i]>=65) && (s[i]<=90))
  { s[i-1]='"';
   s[i-2]='@';}
for(i=0;i<n;i++)
if(s[i]=='.' || s[i]=='?' || s[i]==':' || s[i]=='')
s[i+1]='"';
for(i=0;i<n;i++)
g<<s[i];
g.close();
return 0;
}

首先,如果您要处理面向行的输入,请使用 std::getline逐行阅读;不要使用std::istream::get.另外,您需要在读取检查流的状态,而不是以前。 像while ( std::getline( f, line ). 和line应该是一个std::string,所以你不必担心溢出。(有点。 如果一行包含的内存多于程序可以分配的内存,你会用一个未捕获的std::bad_alloc坠毁. 但那会很多一百多个字符。 一旦你有了这条线,你就可以使用输出流上的<<运算符以输出它。 以及您要输出的任何其他内容。

如果我没错的话,你理解的方式是这样的:

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

int main()
{
    std::string line;
    std::ifstream myfile("1.txt");
    std::ofstream outfile("2.txt");
    if(myfile.is_open())
    {
        while (getline(myfile,line))
            outfile<<"@"<<line<<std::endl;
        myfile.close();
    }
    else 
        std::cout << "Woops, couldn't open file!" << std::endl;

    return 0;
}