校招C++笔试ACM模式输入处理

Posted 狱典司

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了校招C++笔试ACM模式输入处理相关的知识,希望对你有一定的参考价值。

以整型的一维和二维数组为例,构建输入:


//# include <bits/stdc++.h>
# include <iostream>
# include <string>
//如果编译器的<string> 头文件支持 stoi(), 那么就不用<stdlib.h>了,它唯一的作用是提供atoi函数 
# include <stdlib.h>	
# include <sstream>
# include <vector>

using namespace std;


/* ------------- 一维数组的输入 ---------------- */

/* 查看一维数组 */
void showOneDimVec( const vector<int> &nums ) 
	cout << "数组长度为:" << nums.size() << endl << "[ "; 
	for( int num : nums ) cout << num << " ";
	cout <<"]"<< endl;


/* 输入一行不定长的一维数组 */
void getOneDimVec( vector<int> &nums, const char &split )
	string line, elm;
	if( getline(cin, line) )
		stringstream ss(line);
		while( getline(ss, elm, split) )
			nums.push_back(atoi(elm.c_str()));
		
	
 

/* 先写定长度,再写入数组 */
void getOneDimVecByLen( vector<int> &nums, const char &split )
	int len= 0;
	cin >> len;
	nums.resize(len, 0);
	//舍去缓存区中被cin丢弃的换行符 
	cin.ignore();
	string line, elm;
	int i = 0;
	if( getline( cin, line ) )
		stringstream ss(line);
		// 忽略超出长度的部分 
		while( getline(ss, elm, split) && i < len)
			nums[i ++] = atoi(elm.c_str());
		
	


/* ------------- 二维数组的输入 ---------------- */

/* 输出二维数组 */
void showTwoDimVec( const vector<vector<int>> &nums ) 
	int row = nums.size();
	int col = row==0?0:(nums[0].size());
	cout << "二维数组规模:" << row << "行  " << col << "列" << endl; 
	for( vector<int> vec : nums )
		cout << "[ ";
		for( int num : vec )	cout << num << " ";
		cout << "]" << endl;
	



/* 二维矩阵的输入, 默认不靠输入指定长度 */
void getTwoDimVec( vector<vector<int>> &nums, int &row, int &col, const char &split, const bool isDiyLen = false )
	if( isDiyLen )
		cin >> row; cin >> col; cin.ignore();
		nums.resize( row, vector<int>(col, 0) );
	
	string line, elm;
	for( int i = 0, j = 0; i < row; i ++ )
		if( getline(cin, line) )
			j = 0;
			stringstream ss(line);
			while( getline(ss, elm, split) && j < col )
				nums[i][j ++] = atoi( elm.c_str() );
			
		
	
 

/* 二维--测试 */
void testTwoDimVec()
	vector<vector<int>> nums;
	int row = 0, col = 0;
	while(1)
		getTwoDimVec( nums, row, col, ' ', true );
		showTwoDimVec( nums );
	
	return;
 


/* 一维--测试 */
void restOneDimVec()
	vector<int> nums;
	while(1)
 		getOneDimVecByLen(nums, ' ');
 		showOneDimVec(nums);
 	
 	return;


int main()
	testTwoDimVec();
	return 0;
 

以上是关于校招C++笔试ACM模式输入处理的主要内容,如果未能解决你的问题,请参考以下文章

python3 牛客网:OJ在线编程常见输入输出练习(ACM模式)

京东校招笔试(C++方向)编程题

百度 | 2021校招C++研发工程师笔试详解

Bilibili校招C++后端开发笔试 | 编程部分

Bilibili校招C++后端开发笔试 | 编程部分

AL2018届校招笔试——自然语言处理