C++ 文件的操作

 首先,记事本是个好东西,CTRL+H可以实现替换功能!当输入文件包含“,”之类的非空格字符时,可以使用替换功能替换成空格输入。

其次,当我们使用freopen的时候,不要公用scanf,printf和cin,cout!!!

/*  主要的操作   
    1.打开输入输出文件
    2.从输入文件中读入
    3.输出到输出文件
    4.关闭输入输出流
*/

freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
while(cin >> input){
	
} 
cout << output;

fclose(stdin);
fclose(stdout);


文件操作例题:P1515 - [蓝桥杯2020初赛] 寻找2020 - New Online Judge (ecustacm.cn)

#include <stdio.h> 
#include <iostream> 
#include <cstring>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

long long res, cnt, row, col;
string s[10100];

bool check(int x, int y)
{
	if(x < 0 || y < 0 ||x >= 300 || y >= 300)	return true;
	return false;
}

int main() 
{ 
	string str;
	freopen("2020.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
	while(cin >> str)
	{
		s[cnt ++ ] = str;		
	}

	for(int i = 0; i < cnt; i ++ )//枚举每一行 
	{
		for(int j = 0; j < cnt -3; j ++ )
		{
			if(s[i].substr(j, 4) == "2020")	row ++ ;	
		}	
	}	
		
	cout << "row: " << row << endl;
	
	for(int i = 0; i < cnt; i ++ )//枚举每一列 
	{
		for(int j = 0; j < cnt -3; j ++ )
		{
			if(s[j][i] == '2' && s[j + 1][i] == '0' &&  s[j + 2][i] == '2' && s[j + 3][i] == '0')
				col ++ ;	
		}	

	}
	
	cout << "col: " << col << endl;
	
	for(int i = 0; i < cnt; i ++ )
	for(int j = 0; j < cnt; j ++ )
	{
		if(check(i + 3, j + 3))	continue;
		if(s[i][j] == '2' && s[i + 1][j + 1] == '0' && s[i + 2][j + 2] == '2' && s[i + 3][j + 3] == '0')
			res ++ ;
	}
	
	//本题目不包括右下到左上!!! 
//	for(int i = 0; i < cnt; i ++ )
//	for(int j = 0; j < cnt; j ++ )
//	{
//		if(check(i + 3, 299 - j - 3))	continue;
//		if(s[i][299 - j] == '2' && s[i + 1][299 - j - 1] == '0' && s[i + 2][299 - j - 2] == '2' && s[i + 3][299 - j - 3] == '0')
//			res ++;
//	}	
	
	cout << "res: " << res << endl;
	
	cout << "all: " << res + col + row << endl;
	
	fclose(stdin);
	fclose(stdout);
	//90000个字符 
	
}


P1331 - [蓝桥杯2017初赛]兴趣小组 - New Online Judge (ecustacm.cn)

本题中先用记事本替换所有逗号为空格

#include <iostream>
#include <algorithm>
#include <cstring>
#include <unordered_set>

using namespace std;

unordered_set<int> a, b, c;
int n;

int main()
{
	/*
	freopen("a.txt", "r", stdin);
//	int c1 = 150, c2 = 250, c3 = 250;
	int cnt = 1;
	while(cin >> n)
	{
		if(cnt <= 150)	a.insert(n);
		else if(cnt <= 400)	b.insert(n);
		else	c.insert(n);	
		cnt ++ ;
	}	
	cout << a.size() << " " << b.size() << " " << c.size() << endl;
	fclose(stdin);
	
	int res = 0;
	for(auto &x : a)
	{
		if(b.count(x) && !c.count(x))	res ++ ;
	}
	printf("%d\n", res);
	*/
	printf("20");
	return 0;
} 


参考博客

(11条消息) freopen(“in.txt“,“r“,stdin) 函数的用法(转载)_King_Arthur#的博客-CSDN博客

(11条消息) C语言中输入输出重定向,freopen()妙用。_zz460833359的博客-CSDN博客_c语言输出重定向

posted @ 2022-05-05 08:41  光風霽月  阅读(21)  评论(0编辑  收藏  举报