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

时间:2015-03-14 19:05:07

标签: c++

首先,我想为我的英语道歉。我想创建一个程序,从.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]=='\0')
s[i+1]='\"';
for(i=0;i<n;i++)
g<<s[i];
g.close();
return 0;
}

2 个答案:

答案 0 :(得分:0)

对于初学者,如果您正在处理面向行的输入,请使用 std::getline逐行阅读;不要使用std::istream::get。 此外,您需要在读取之后检查流的状态,而不是 之前。像while ( std::getline( f, line )这样的东西。 line 应该是std::string,所以你不必担心溢出。 (排序。如果一行包含的内存多于程序可以分配的内存, 你会因未被捕获的std::bad_alloc而崩溃。但那将是很多 超过一百个字符。)一旦你有了这条线,就可以使用了 输出流上的<<运算符输出它。随着 你要输出的任何东西。

答案 1 :(得分:0)

如果我正确地理解你的提议:

#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;
}