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语言输出重定向