秋招第一次笔试,没怎么准备传统OJ(ACM模式)类型的题,逗号分隔+每排数量不一样的输入当场给我整麻了,吸取失败的经验教训,在此整理了ACM模式的输入读取处理。
1. 简单输入 1.1 空格间隔输入几个变量的值,以空格隔开。
示例:
1 2
#include1.2 逗号间隔using namespace std; int main() { int a,b; cin >> a >> b; //处理题目 //cout << a <<" " << b << endl; return 0; }
输入几个变量的值,以逗号隔开。
//思路:用一个char型变量接收逗号。
示例:
1, 2, 3
#includeusing namespace std; int main() { int a, b, c; char s; cin >> a >> s >> b >> s >>c; //处理题目 //cout << a <<" " << b << " " << c < 2. n个输入 2.1 空格隔开 开始输入一个N,接下来输入N个数据,以空格隔开。
示例:
3
1 2 3#include2.2 逗号隔开#include using namespace std; int main() { int n; cin >> n; vector nums(n); for (int i = 0; i < n; ++i) { cin >> nums[i]; } //处理题目 return 0; } 开始输入一个N,接下来输入N个数据,以逗号隔开。
示例:
3
1,2,3#include3. 不指定数量的一行输入#include using namespace std; int main() { int n; cin >> n; char s; vector nums(n); for (int i = 0; i < n - 1; ++i) { cin >> nums[i] >> s; } cin >> nums[n - 1]; //处理题目 return 0; } 输入不指定数量的一行数据,以空格或逗号隔开。
//思路:不指定vector大小,逐个压入;通过cin.get()从缓存中读取一个字节,如果是换行符’n’就终止。
示例1:
1 3 5 7 9
示例2:
2,4,6,8#include4. n行,每行m个输入 4.1 空格间隔#include using namespace std; int main() { vector nums; int num; int n=0; while (cin >> num) { nums.push_back(num); ++n; if (cin.get() == 'n') break; //cin.get()可换为getchar() } //处理题目 return 0; } 开始输入一个N,接下来输入N行数据,每行有M个数据(题目给定或也在第一行输入),以空格隔开。
示例:
3 3
1 2 3
4 5 6
7 8 9#include4.2 逗号间隔#include using namespace std; int main() { int n, m; cin >> n >> m; vector > nums(n,vector (m)); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cin >> nums[i][j]; } } //处理题目 return 0; } 开始输入一个N,接下来输入N行数据,每行有M个数据(题目给定或也在第一行输入),以逗号隔开。
示例:
3,3
1,2,3
4,5,6
7,8,9#include5. n行,每行不指定输入数量#include using namespace std; int main() { int n, m; char s; cin >> n >> s >> m; vector > nums(n,vector (m)); for (int i = 0; i < n; ++i) { for (int j = 0; j < m-1; ++j) { cin >> nums[i][j] >> s; } cin >> nums[i][m-1]; } //处理题目 return 0; } 开始输入一个N,接下来输入N行数据,每行不指定数据的数量,以空格或逗号隔开。
示例1:
3
1
1 2
1 2 3
示例2:
5
101,2
102,3
103,5
104,2,101,102
105,4,103#include5.x 其他方法#include using namespace std; int main() { int n,num; char s; cin >> n; vector > nums(n); for (int i = 0; i < n; ++i) { while (cin >> num) { nums[i].push_back(num); if (cin.get() == 'n') break; } } //处理题目 return 0; } 仅限以逗号隔开的情况。
#include参考#include #include #include using namespace std; string replaceToSpace(string& s) { int len = s.size(); cout << "长度为:" << len << endl; // 统计空格数量 for (int i = 0; i < len; i++) { if (s[i] == ',') s[i] = ' '; } return s; } int main() { int n; cin >> n; vector > nums(n); //读取一行数据为string,将逗号替换为空格,使用istringstream自动分隔字符串再输入给临时变量(自动将类型转换为int),压入第二层vector for (int i = 0; i < n; ++i) { string s; cin >> s; replaceToSpace(s); istringstream is(s); int tmp; while (is >> tmp) { nums[i].push_back(tmp); } } //处理题目 return 0; } ACM模式各种输入总结C++版
结语
ACM题目中输入数据的处理(C++版)秋招加油鸭~



