问题及代码:
/* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:test.cpp *作 者:陈文青 *完成日期:2015年6月18日 *版 本 号:v1.0 * *问题描述:读入一个C++程序,使程序中的所有左花括号“{”和右花括号“}”都单独占一行,新程序保存到另一个.cpp文件中,并在屏幕上显示处理过的程序,显示时加上行号。 *程序输入: *程序输出: */
#include <fstream> #include<iostream> #include<cstdlib> using namespace std; int main( ) { //将文件中的数据读入到字符数组中 ifstream sourceFile("source.cpp",ios::in); //以输入的方式打开文件 if(!sourceFile) //测试是否成功打开 { cerr<<"source code read error!"<<endl; exit(1); } ofstream outFile("newsource.cpp",ios::out); //以输出的方式打开文件 if(!outFile) //测试是否成功打开 { cerr<<"new source code write error!"<<endl; exit(1); } char ch1,ch2; //表示前后两个字符 while(!sourceFile.eof()) { sourceFile.get(ch2); //花括号前没有换行,添加换行符 if((ch2=='{'||ch2=='}')&&(ch1!='\n')) outFile.put('\n'); //花括号后没有换行,添加换行符 else if((ch1=='{'||ch1=='}')&&(ch2!='\n')) outFile.put('\n'); outFile.put(ch2); //输出当前读入的符号 ch1=ch2;//ch1赋值为ch2的字符,ch2继续向下读取 } outFile.close(); sourceFile.close(); //加行号后输出 cout<<"经过处理后的源程序是:"<<endl; char line[256]; int n=1; ifstream inFile("newsource.cpp", ios::in); //以输入的方式打开文件 if(!inFile) //测试是否成功打开 { cerr<<"file open error!"<<endl; exit(1); } while (!inFile.eof()) { inFile.getline(line,255,'\n'); cout<<n<<".\t"<<line<<endl; n++; } inFile.close(); return 0; }
运行结果:
知识点总结:
换行符和行号安排在一起可能会比较困难,所以将这两个步骤分开进行,会使得程序设计起来更见简便
在进行识别花括号的换行时,设置两个字符型进行前后的识别
时间: 2024-10-09 22:28:23