C++文件操作

2019年华科考了一道文件操作题,所以在这里补充一下相关知识。
文件操作头文件<fstream>,可读可写,定义好头文件好之后对文件的操作需要打开对应文件。

fstream f;
f.open("abc.cpp",ios::in);

上面是打开文件的一般流程,第一句是定义文件指针,第二句的open第一个参数是文件名,第二个参数是控制文件的读写情况,此时成功即返回文件指针,f就与abc.cpp文件相对应了!
这里的第二个参数常用的有以下4个:
在这里插入图片描述
对文件操作重要的是输入输出,fstream由iostream引申而来,f可以代替cin和cout进行输入输出,即在我们正常的输入输出中,只要把cin或cout变成对应的文件指针就可以对该文件输入输出。
承接上面定义,下面代码表示从f指向文件中输入一行

string  s;
getline(f,s)

输入输出解决了,还有一个重点就是控制输入输出的位置
通俗而言,文件刚打开会有一个默认指向文件开头的指针,在这里对文件操作有文件内指针会自动移动到下一个位置,如果是上面对行操作会自动移动到下一行。
如果我们需要改变位置就用到seekg() 和seekp() 分布是改变输入和输出指针的位置,其有两个参数,意义如下。
ios::beg 文件头
ios::end 文件尾
ios::cur 当前位置
例子:
file.seekg(0,ios::beg); //让文件指针定位到文件开头
file.seekg(0,ios::end); //让文件指针定位到文件末尾
file.seekg(10,ios::cur); //让文件指针从当前位置向文件末方向移动10个字节
file.seekg(-10,ios::cur); //让文件指针从当前位置向文件开始方向移动10个字节
file.seekg(10,ios::beg); //让文件指针定位到离文件开头10个字节的位置

最后一步就是一些判断标志,文件是否打开,文件位置是否到了结尾等
Is_open( ) 判断文件是否处于打开的状态。如果是,返回true;如果不是,返回false
eof() 判断读文件是否到达文件末尾。如果是,返回true;如果不是,返回false

例题:
2019年华科机试第二题
将第一题的源代码保存为abc.c文件,并且要求abc.c文件中有相当数量的注释,包括//和/……/两种形式的注释
(1)读取abc文件的内容,将其显示在控制台上,并为每行代码增加一个符号。(10)
(2)使源代码中的//类型的注释内容不显示在控制台中。(10)
(3)使源代码中的/……/类型的注释内容不显示在控制台中。(10)

#include<fstream> 
#include<string>
#include<iostream> 
using namespace std;

int main(){
    fstream f;
    string s,a;
    f.open("abc.cpp",ios::in);//打开文件,只读 
    while(getline(f,s)){   //一行行读入元素 
    	
    	for(int i=0;i<s.size();i++) 
    	{
    		if(s[i]=='/'){
    			
    			if(s[i+1]=='/'){
    			s.erase(s.begin()+i,s.end()); 
				break;}//如果是行注释 
    			else if(s[i+1]=='*') {        //如果是/**/注释 
    			     a=s ;
    			     s.erase(s.begin()+i,s.end());
    				while(a[a.size()-1]!='/'){ //找到末尾 
    					getline(f,a);	
					}
					break;	 
				}	
			}	
		}
    	cout<<s<<"!"<<endl;	
	}
	f.close();
	return 0;
}

abc文件
在这里插入图片描述
对应结果:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值