复杂输入
输入输出是笔试编程题目的一个考点,题目中经常会出现比较复杂的输入情况,例如最短路径问题,其输入描述如下:
输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点t。n和m为0时输入结束。
(1<n<=1000, 0<m<100000, s != t)
输入示例:
3 2
1 2 5 6
2 3 4 5
1 3
0 0
对于此类包含多行数据的复杂输入,在调试代码时如何提升输入效率是个值得重视的问题。手动输入效率太低,复制粘贴是一种可行的办法,但是每次运行都需要操作一次,而且遇到不定输入的情况,还需要手动按ctrl
+ c
终止,很不方便,这种情况有一种很好的解决方法:文件输入。
文件输入
由于C++代码中要求#include<iostream>
,即使用标准输入输出流,输入输出都需要通过windows的控制台窗口进行,因此当输入复杂时会带来不便。
接下来,本文将以C++语言为例,讲解如何有效应用文件输入解决复杂输入问题。
使用文件输入需要包含<fstream>
头文件,其基本代码如下:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream cin("./in.txt");
cin.close();
return 0;
}
我们构造一个与标准输入同名的文件输入流ifstream
变量cin
,它默认以读的方式打开当前目录下的in.txt
文件(./
代表当前目录,即当前正在编辑的代码文件所在文件夹),之后题目的n
、m
等所有输入都可以从文件输入流cin
中获取,如:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream cin("./in.txt");
int n, m;
cin >> n >> m;
...
cin.close();
return 0;
}
将题目输入数据复制到in.txt
中,直接运行代码即可得到输出结果。因为之前将ifstream
变量也命名为cin
,因此在提交代码时,将ifstream cin("./in.txt")
与cin.close()
两行代码注释或删除掉,此时cin
又恢复成默认的标准输入流了,直接提交代码即可。
文件输入使用流程
接下来以Visual Studio 2017(Enterprise)为例,介绍使用文件输入的流程。
定义文件输入代码模板
事先定义一个使用文件输入的代码模板,在包含常用头文件的基础上,包含前述文件输入代码,例如:
#include "pch.h"
#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
#include <stack>
#include <algorithm>
#include <fstream>
using namespace std;
int main()
{
ifstream cin("./in.txt");
cin.close(