相信大多数笔试过的人大部分都被测试输入搞的炸毛过,下面介绍常见的几种输入样例的处理方法:
1. 处理单值输入
例:
10
处理输入代码如下:
#include <iostream>
using namespace std;
int main(){
int m;
cin >> m;
cout << m << endl;
return 0;
}
2. 处理空格隔开的多值输入
例:
10 11 12
处理输入代码如下:
#include <iostream>
using namespace std;
int main(){
int m, n, l;
cin >> m >> n >> l;
/* process */
cout << m << " " << n << " " << l << endl;
return 0;
}
3. 处理空格和换行符隔开的多值输入
例:
10 11 12
13 14 15
处理输入代码如下:
#include <iostream>
using namespace std;
int main(){
int m, n, l;
cin >> m >> n >> l;
cin >> m >> n >> l; // 同样的道理,一直用cin读就好了
/* process */
cout << m << " " << n << " " << l << endl;
return 0;
}
3. 处理逗号隔开的多值输入
例:
10,11,12
处理输入代码如下:
#include <iostream>
using namespace std;
int main(){
int m, n, l;
char seq; // 增加读取符号的变量
cin >> m >> seq >> n >> seq >> l;
/* process */
cout << m << " " << n << " " << l << endl;
return 0;
}
4. 处理指定数量的多值输入
例(第一行指定了每列的输入数量):
3 2
1 2 3
4 5
处理输入代码如下:
#include <iostream>
#include <vector>
using namespace std;
int main(){
int m, n;
cin >> m >> n;
vector<int> A(m), B(n);
for (int i = 0; i < m; i++){
cin >> A[i];
}
for (int i = 0; i < n; i++){
cin >> B[i];
}
/* process */
for (int i = 0; i < m; i++){
cout << A[i] << " ";
}
cout << endl;
for (int i = 0; i < n; i++){
cout << B[i] << " ";
}
cout << endl;
return 0;
}
4. 处理指定数量(带有提示符)的多值输入
例(第一行指定了每列的输入数量):
m=3,n=2
1 2 3
4 5
处理输入代码如下:
#include <iostream>
#include <vector>
using namespace std;
void get_m_and_n(string& line, vector<int>& res){
int fidx = line.find("=", 0);
int eidx = 0;
while(fidx >= 0 && fidx < line.length()){
eidx = line.find("=", fidx + 1);
string temp = line.substr(fidx + 1, eidx - fidx);
res.push_back(stoi(temp));
fidx = eidx;
}
}
int main(){
string line;
vector<int> res;
int m, n;
cin >> line;
get_m_and_n(line, res); // 获取第一行中所有数值
m = res[0];
n = res[1];
vector<int> A(m), B(n);
for (int i = 0; i < m; i++){
cin >> A[i];
}
for (int i = 0; i < n; i++){
cin >> B[i];
}
/* process */
for (int i = 0; i < m; i++){
cout << A[i] << " ";
}
cout << endl;
for (int i = 0; i < n; i++){
cout << B[i] << " ";
}
cout << endl;
return 0;
}
5. stringstream处理字符串
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
int main(){
string line = "30 10";
stringstream ss(line);
int m, n;
ss >> m >> n; // 从字符串中读取值
cout << m << " " << n << endl;
return 0;
}
本文介绍了程序员面试中常遇到的输入样例处理策略,包括单值、多值输入(空格、换行、逗号分隔)、指定数量输入、字符串流等,并提供了相应的代码示例。掌握这些技巧能有效提升笔试应对能力。
1100

被折叠的 条评论
为什么被折叠?



