ACM各种输入模式总结(C++)

目录

前言:

一、输入输出函数

①cin---适用于输入数组以及字符串(不考虑字符串内部空格)

②getline()---适宜用它输入整行字符串(内含空格字符)

③getchar()---经常用于吃回车

二、具体常见案例

 ①一维数组(固定数目)

输入描述:

代码:

②一维数组(不固定数目)

输入描述:

代码:

③二维数组

输入描述:

代码:

④字符串(固定数目)

输入描述:(空格、换行)

代码:

⑤字符串(不固定数目)

输入描述:

代码:

⑥字符串(一整行)

输入描述: 

代码:

总结:


前言:

输入的一般要求,主体上分为数组和字符串。在牛客平台上有很多ACM模式的算法题可以训练。

这里罗列总结常用的输入输出函数以及使用方式,方便快速入门以及提早避开一些坑不用花太多时间在这上面,着重准备leetcode的刷题上。

一、输入输出函数

①cin---适用于输入数组以及字符串(不考虑字符串内部空格)

#include <iostream>

注意点1:cin 可以连续从键盘读取数据

注意点2:cin以空格、tab、换行符作为分割

注意点3:cin从第一个非空格字符开始读取,直到遇到分隔符结束

注:输出endl对象的时候,会输出一个换行符"\n"。

简单示例: 

    //单个输入
    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()---适宜用它输入整行字符串(内含空格字符)

#include<string>

它会读取一行的字符串,直到遇到换行符结束。(遇到空格,也会读取)

 简单示例: 

    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一下,看对不对。

猜你喜欢

转载自blog.csdn.net/weixin_42373086/article/details/129758333