0%

笔试输入输出总结

常见输入

常见机试输入

输入一个数字再加上空格间隔的数组,并且给了数组元素个数n

1
2
3
4
5
int n;
cin >> n;
vector<int> input(n);
for(int i = 0; i < n; i++)
cin >> input[i];

输入一个数字再加上空格间隔的数组,但是没有给数组元素个数n

1
2
3
4
5
6
7
int a;
vector<int> input;
while(cin >> a){
input.push_back(a);
if(cin.get() == '\n')
break;
}

给你输入的数据组数t,和很多组数据。这些数据有换行,但是数组元素个数都没有给

比如:

1
2
3
4
5
6
7
3            //有3组数据
1 2 3 4 5 //第一组数据A
2 4 5 3 6 //第一组数据B
3 4 6 //第二组数据A
2 2 5 //第二组数据B
1 //第三组数据A
0 //第三组数据B

因为没有给每行数据的个数,所以一行数据输入完成时需要识别换行符
输入方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int t, a;
cin >> t;
vector<int> A, B;
for(int i = 0; i < 2*t; i++){
while(cin >> a){
A.push_back(a);
if (cin.get() == '\n')
break;
}
while(cin >> a){
B.push_back(a);
if (cin.get() == '\n')
break;
}
}

不存在空格的字符数组

1
2
string s;
cin >> s;

输入带有空格的字符数组

1
2
string s;
getline(cin, s);

输入多个整数

1
2
int a,b,c,d;
cin >> a >> b >> c >> d;

字符串的输入

getline

  • getline(istream& is, string& str); 把is传到str中
  • getline(istream& is, string& str, char delim); delim是截断字符,可以用来分割字符串
    1
    2
    3
    4
    5
    6
    7
    8
    #include <sstream>

    string s = "alice,20,800,sz";

    istringstream is(s);
    string str;
    std::getline(is, str); //str: alice,20,800,sz
    std::getline(is, str, ','); //str: alice

输入:[1,1,1,1,2,1,1],[5,2,5,4,5,1,6]。要求提取出数字。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main(){
string sw, sh;
getline(cin, sw, ']');
getline(cin, sh, ']');

istringstream isw(sw.substr(1)), ish(sh.substr(2));

string tmp;
vector<int> width, height;
while (getline(isw, tmp, ','))
width.push_back(stoi(tmp));
while (getline(ish, tmp, ','))
height.push_back(stoi(tmp));

return 0;
}

输出精度控制

如:输出保留2位小数

1
2
3
4
5
6
double d = 1.666666;
//c++
#include <iomanip>
cout << setprecision(3) << d << endl; //1.67
//c
printf("%.2f\n", d); //1.67

OJ练习

牛客