目录
①cin---适用于输入数组以及字符串(不考虑字符串内部空格)
②getline()---适宜用它输入整行字符串(内含空格字符)
前言:
输入的一般要求,主体上分为数组和字符串。在牛客平台上有很多ACM模式的算法题可以训练。
这里罗列总结常用的输入输出函数以及使用方式,方便快速入门以及提早避开一些坑,不用花太多时间在这上面,着重准备leetcode的刷题上。
一、输入输出函数
①cin---适用于输入数组以及字符串(不考虑字符串内部空格)
简单示例:
//单个输入
int num;
cin >> num;
cout << num <<endl;
//批量输入
vector<int> nums(5);
for (int i = 0; i < nums.size(); i++){
cin >> nums[i];
}
//批量输出
for (auto it = nums.begin(); it != nums.end(); it++){
cout << *it << " ";
}
②getline()---适宜用它输入整行字符串(内含空格字符)
简单示例:
string s;
getline(cin, s);
cout << s << endl;
③getchar()---经常用于吃回车
简单示例:
char ch;
ch = getchar();
cout << ch << endl;
二、具体常见案例
①一维数组(固定数目)
3
1 2 3
输入描述:
第一行:一个整数n,表示数组长度
第二行:有n个整数,数字间用空格隔开。
代码:
int n;
cin >> n;
vector<int> nums(n); // 创建vector<int>承载
for(int i = 0; i < n; i++) {
cin >> nums[i];
}
// 验证是否读入成功
for(int i = 0; i < nums.size(); i++) {
cout << nums[i] << " ";
}
cout << endl;
②一维数组(不固定数目)
1 2 3 4
输入描述:
第一行:有未知数目的整数,数字之间用空格隔开。
这里适用于while循环结合cin来处理该问题。
代码:
vector<int> nums;
int num;
while(cin >> num) {
nums.push_back(num);
// 读到换行符,终止循环
if(getchar() == '\n') {
break;
}
}
// 验证
for(int i = 0; i < nums.size(); i++) {
cout << nums[i] << " ";
}
cout << endl;
③二维数组
2 3
1 2 3
4 5 6
输入描述:
第一行:第一个数表示数组的行数,第二个数表示数组的列数
第二行:二维数组的第一行整数元素
第三行:二维数组的第二行整数元素
代码:
int a; // 行数
int b; // 列数
cin >> a >> b;
vector<vector<int>> nums(a, vector<int>(b));
for(int i = 0; i < a; i++) {
for(int j = 0; j < b; j++) {
cin >> nums[i][j];
}
}
// 验证
for(int i = 0; i < a; i++) {
for(int j = 0; j < b; j++) {
cout << nums[i][j] << " ";
}
cout << endl;
}
④字符串(固定数目)
3 abc def g
3
abc
def
g
输入描述:(空格、换行)
第一个数3表示字符串个数,后面有用空格或者换行符隔开的3个字符串。
代码:
int n;
cin >> n;
vector<string> strs(n);
for(int i = 0; i < n; i++){
cin >> strs[i];
}
//验证
for(int i = 0; i < strs.size(); i++){
cout << strs[i] << " ";
}
cout << endl;
⑤字符串(不固定数目)
abc ab a d
输入描述:
第一行:用空格隔开的多个字符串
代码:
vector<string> strs;
string str;
while(cin >> str) {
strs.push_back(str);
// 读到换行符,终止循环
if(getchar() == '\n') {
break;
}
}
// 验证
for(int i = 0; i < strs.size(); i++) {
cout << strs[i] << " ";
}
cout << endl;
⑥字符串(一整行)
abc=def;ghi=jkl;
输入描述:
第一行:一个完整的字符串 ,具体字符串内容是用分号隔开
代码:
vector<string> strs;
// 读入字符串
string s;
getline(cin, s);
// 将读入的字符串按照逗号分隔
int p = 0;
for(int q = 0; q < s.size(); q++) {
p = q;
while(s[p] != ';' && p < s.size()) {
p++;
}
string tmp = s.substr(q, p - q);
strs.push_back(tmp);
q = p;
}
// 验证
for(int i = 0; i < strs.size(); i++) {
cout << strs[i] << " ";
}
cout << endl;
总结:
以上代码,都已在本地IDE跑过。在遇到输入字符串时,尤其要注意换行符以及空格,最好都输出debug一下,看对不对。