笔试中acm输入的自我总结

发布时间 2023-09-28 21:29:03作者: 600低保吃一月

参考笔记:ACM模式各种输入总结C++版 - 知乎 (zhihu.com)

之前觉得就是输入没那么难,但是做了好几个厂的笔试题,着实给我整不会了。所以赶紧亡羊补牢吧!!

总结一下:输入的长度大小一般是给定的,不给定大小的情况我个人感觉很少。而且对于输入的分隔符无非就两种“,”和“ ”;

所以代码中有一些用while进行cin输入的,完全可以用for替代。

代码:

//这个文件是总结acm各种情况的输入,建议记忆
#include "acmcin.h"
using namespace std;

//按照acm的题型分为处理数字型,和处理字符串型
//首先要知道cin只能将空格和table作为分隔符!!!

//处理数字型
//已知长度,且以空格分割
//一般已知长度是指在数据前面输入数据的基本信息
/**************输入*****************/
//			3 4
//			1 2 3
//			4 5 6
//			7 8 9
//			10 11 12
/**********************************/
void shuzi_kongge()
{
	int num = 0, len = 0;
	cin >> num;
	cin >> len;
	vector<vector<int>>arr(num, vector<int>(len));
	int temp = 0;
	for (int i = 0; i < num; i++)
	{
		for (int j = 0; j < len; j++)
		{
			cin >> arr[i][j];
			/*temp;
		arr[i].push_back(temp);*/
		}
	}

	cout << "输入如下" << endl;
	for (int i = 0; i < num; i++)
	{
		for (int j = 0; j < len; j++)
		{
			cout << arr[i][j] << "\t";
		}
		cout << endl;
	}
}

//已知长度,且以","分割
/**************输入*****************/
//	3
//	1,2,3,3,2
//	4,5,6,1,3
//	7,8,9,13,4
/**********************************/
void shuzi_douhao()
{
	/*int num = 0;
	cin >> num;
	vector<int, vector<int>>arr(num);
	string cur
		while()

	cout << "输入如下" << endl;*/
	int n;
	cin >> n;
	//vector<vector<int>> vec(n, vector<int>(5));
	vector<vector<int>> vec(n);
	for (int i = 0; i < n; ++i)
	{//注意这里一定要有i控制,用while容易一直输入导致错误
		string s;
		cin >> s;
		replace(s.begin(), s.end(), ',', ' ');

		/*cout << "测试" << endl;
		cout << s << endl;*/

		istringstream is(s);
		string tmp;

		//事先知道数组多长可以用for
		//for (int j = 0; j < 5; ++j)
		//{//内层循环也很重要
		//	is >> tmp;
		//	vec[i][j] = stoi(tmp);
		//}

		//事先不知道数组多长可以用while
		while (is >> tmp)
		{
			vec[i].push_back(stoi(tmp));
		}
	}

	//输出显示
	for (int i = 0; i < vec.size(); i++)
	{
		for (int j = 0; j < vec[0].size(); j++)
		{
			cout << "\t" << vec[i][j];
		}
		cout << endl;
	}

	//return 0;
}

/*******************处理未知长度的输入应该很少,最起码也得有一个结束标志位**********************/
/*******************处理未知长度的输入应该很少,最起码也得有一个结束标志位**********************/
/*******************处理未知长度的输入应该很少,最起码也得有一个结束标志位**********************/

//未知长度,且以空格分割						//这个暂时有问题
/**************输入*****************/
//			1 2 3 3 2
//			4 5 6 1 3
//			7 8 9 13 4
/**********************************/

//这个由于未知长度,没法判断输入结束,需要知道其他更多的信息
void shuzi_kongge_weizhi()
{
	vector<int>vec;
	//vector<vector<int>>vec;
	string s;
	int num = 0, len = 0;
	int i = 0;
	bool flag = true; //记录一行的个数;

	while (cin >> num)
	{
		vec.push_back(num);
		if (flag)len++;

		if (getchar() == '\n')
		{
			if (flag)
				flag = false;

			continue;
		}
	}

	//输出显示
	for (int i = 0; i < vec.size(); i++)
	{
		cout << "\t" << vec[i];
		if ((i + 1) % len == 0)
			cout << endl;
	}
}

//未知长度,但是用","分割
/**************输入*****************/
//		1, 2, 3, 3, 2
//		4, 5, 6, 1, 3
//		7, 8, 9, 13, 4
/**********************************/
void shuzi_douhao_weizhi()
{
	string s;
	vector<int>vec;
	while (cin >> s)
	{
		replace(s.begin(), s.end(), ',', ' ');

		istringstream is(s);
		int temp = 0;
		string cur;
		cout << "转化结果" << endl;
		while (is >> cur)
		{
			vec.push_back(stoi(cur));
			cout << "\t" << stoi(cur);
		}
		cout << endl;
	}
}
/*******************处理未知长度的输入应该很少,最起码也得有一个结束标志位**********************/
/*******************处理未知长度的输入应该很少,最起码也得有一个结束标志位**********************/
/*******************处理未知长度的输入应该很少,最起码也得有一个结束标志位**********************/

//处理字符串

//以空格分割
/*********************************输入**************************************/
// good good study day day up
/*********************************输入**************************************/

void str_kongge()
{
	vector<string>str;
	string s;
	while (cin >> s)
	{
		str.push_back(s);
		if (getchar() == '\n')
		{
			s.clear();
			break;
		}
	}
	//输出结果
	cout << "输出展示" << endl;
	for (auto st : str)
	{
		cout << st << " ";
	}
	cout << endl;
}
//用","分割
void str_douhao()
{
	vector<string>str;
	string s;
	//使用getline函数
	while (getline(cin, s))
	{
		stringstream input(s);
		//cout << input << endl;
		string s1;
		while (getline(input, s1, ','))
		{
			str.push_back(s1);
			/*if (getchar() == '\n')
				break;*/
			s1.clear();
		}

		/*replace(s.begin(), s.end(), ',', ' ');
		istringstream is(s);
		string temp;
		while (is >> temp) {
		}
		if (getchar() == '\n')
		{
			break;
		}*/
	}

	//输出结果
	cout << "输出展示" << endl;
	for (auto st : str)
	{
		cout << st << " ";
	}
	cout << endl;
}