最近一直在看一些笔试编程的题目,作为一个编程菜鸟,很多时候都卡在了输入输出阶段,收集整理一下,以备不时之需。 采取的编程语言是C++(很喜欢STL模板,比较省事,自己对与一些定义还不熟练吧)。
数据读取
首先呢,就是怎么读数据,我们列举一下可能的输入形式(比较难的部分啦,简单的大家都懂):
多组字符串
可以看到,同一般的输入不同,这里没有给出有多少组测试用例,但是每个用例都是一行,so~
输入:
string s;
while(cin>>s){
//具体处理过程;
}
算是一个比较简略的处理方法,因为此时每行都没有空格等特殊字符,并且一行为一个测试用例
多组数据,多行输入
输入描述:
第一行一个数T(T ≤ 100),表示数据组数。对于每组数据,第一行两个数n,k(1 ≤ n,k <=100),接下来一行有2n个数 a1,a2,...,a2n (1 ≤ ai ≤ 1000000000)。
输出描述:
对于每组数据,输出一行,最终的序列。数字之间用空格隔开,不要在行末输出多余的空格。
输入例子:
3
3 1
1 2 3 4 5 6
3 2
1 2 3 4 5 6
2 2
1 1 1 1
输出例子:
1 4 2 5 3 6
1 5 4 3 2 6
1 1 1 1
此时,我们对应的输入可以是:
int T;//T组数据
int n,k;
cin>>T;
for(int i=0;i<T;i++){
cin>>n>>k;
vector<int> a(2*n);//初始化个数
for(int j=0;j<2*n;j++){
cin>>a[j];
}
//下一步操作
}
这里我们用到了vector这个对象,可以当成是一个可变长度的数组,如果数组的大小不知道,利用vector还蛮方便。
二维数组输入
有时候题目会给你一个二维的数组,m*n ,这个时候输入方法就乱了,我还是推荐使用vector
比如:
输入第一行为二维数组的实际大小,之后每一行为二维数组的实际内容:
4
*000
00*0
00**
0*00
此时的输入为:
int m;
cin>>m;
vector<vector<char>> a(m,vector<char>(m));
for(int i=0;i<m;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];
}
}
整数数组的输入
很多时候,输入的数组不仅时字符串,还有整数,例如:
输入描述:
一行整数序列,数字用空格分隔,如:1 4 -1 3 5 6 2
我一般采取的方法是:
int tmp;
vector<int> v;
while(cin>>tmp){
v.push_back(tmp);
}
当然还有更加复杂的情况,例如:
输入第一行为整数序列,数组用空格分隔,如:45 67 33 21
输入第二行为一个整数k,k在数组长度范围内,如:2
一个可行的方式是:
char c;
int k,tmp;
vector<int> v;
while((c=getchar())!='\n'){
if(c!=' ')//可替换为其他分隔方式
{
ungetc(c,stdin);
cin>>tmp;
v.push_back(tmp);
}
}
cin>>k;
暂时就这些啦,之后再补充