编写一个C ++ pgm来读取文件“input.txt”,每当遇到句点时插入换行符并将修改后的内容写入“output.txt”

时间:2013-12-30 06:36:33

标签: c++ file-io

问题:用C ++编写一个程序来读取文件“input.txt”,并且只要在文件“input.txt”中遇到句点,就插入换行符,然后将修改后的内容写入新文件“输出.txt“并保存。最后打印遇到的周期数。

我编写了以下程序但是这个程序编译得很好但是没有执行所以请帮帮我。谢谢和问候。

#include<iostream>
#include<fstream>
using namespace std;
int main(){
    int count = 0;
    ofstream myFile;
    char ch;
    myFile.open("D:\\Files\\input.txt");
    myFile<<"Hi this is Yogish. I'm from Bengaluru, India. And you are ??"<<endl;
    myFile.close();

    ofstream myHandler;
    myHandler.open("D:\\Files\\output.txt");

    fstream handler;
    handler.open("D:\\Files\\input.txt");
    if(handler.is_open()){
                         while(!handler.eof()){
                                             handler>>ch;
                                             if(ch != '.'){
                                                   handler<<ch;
                                                   }
                                             else{
                                                  myHandler<<ch<<'\n';
                                                  handler<<'.'<<'\n';
                                                  count++;
                                                  }
                                                  }
                         }
    cout<<"The number of periods : "<<count++<<endl;
    system("pause");
    }

1 个答案:

答案 0 :(得分:0)

我认为这个问题意味着您只需要将修改后的内容写入新文件output.txt。目前你也试图写入输入文件。

您应该在一个字符串中读取整行,然后使用<algorithm>标题中的std :: replace_if算法。

此外,一般情况下,您应该避免将终止条件检查为file.eof(),因为只有在读取操作之后才设置。因此,有可能在读取字符后设置eof()位,这意味着最后一个字符读取无效,并且您将此无效字符输出到该文件。

这将导致未定义的行为。

相反,你应该尝试类似的东西:

bool isDot( const char& character ) {
  return character == '.';
}

在你的主要功能中:

std::string newLine;

// enter the loop only if the read operation is successful
while ( getline( handler, newLine ) ) {
  count += std::count_if( newLine.begin(), newLine.end(), isDot );
  std::replace_if( newLine.begin(), newLine.end(), isDot, '\n' );
  myHandler << newLine;
}