大厂笔试题中关于个别数据难以从输入端读取的解决办法

前言

上一篇文章中作者提到过,因为有些笔试题他给的输入内容存在一定的格式修改问题,所以小编在这里专程加写了一篇文章来介绍如何从输入端读取那些笔试题中格式下的数据。

一:多串数组:[{数字,数字},{数字,数字},······]

首先是[{1,2,5},{4,5,6,7},{4,5,6},{7}]这种输入格式,其中每一个{}部分都代表一个数组内元素,然后不会给出的是数组个数以及数组元素个数,如果该测试用例只有一个自然不成问题,但在多数测试用例的数组个数和数组元素个数都各不相同的情况下,从中完整的读取数据就成了一定问题。

那么小编给出的针对这种输入格式的办法如下:

首先是需要的头文件:

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <cctype>  // 用于判断字符是否为数字

然后是主函数部分,先建立一个string字符串类型的对象整体接收进来:

// 读取输入字符串
std::string input;
std::cin >> input;

然后我们再去掉最外层的[]:

// 去掉外部的方括号
input = input.substr(1, input.length() - 2);

 而后我们进行{}的分割读取操作:

// 使用stringstream分割内部的数组
	std::stringstream ss(input);
	std::string token;
	// 存储解析后的数组
	std::vector<std::vector<int>> result;
	while (std::getline(ss, token, '{')) {
		// 用另一个stringstream分割内部的整数
		std::stringstream arrayStream(token);
		std::vector<int> currentArray;
		int value;
		while (arrayStream >> value) {
			currentArray.push_back(value);
			if (arrayStream.peek() == ',')
				arrayStream.ignore();
		}
		if (!currentArray.empty()) {
			result.push_back(currentArray);
		}
	}

此时我们已经将全部数据成功读取到了result中,接下来就可以对数据进行需要的处理操作了。

二:版本号:"数字.数字","数字.数字.数字"

首先是"1.1","2.1"这样一种输入格式,这种输入格式最大的问题在于写核心代码模式的人感受不到它这种格式的恶心之处在于ACM模式,我们都知道要定义一个字符串类型的写法如下:

string s = "hello world!";

 我们自己在进行输入接受的时候也只会写出""中间的值,可是像"1.1","2.1"这种输入格式,就存在引号干扰正常数据的读取了。

那么小编给出的针对这种输入格式的办法如下:

首先是需要的头文件:

#include <iostream>
#include <string>
#include <sstream>
#include <vector>

其中sstream是用于字符串流处理的。

 然后是主函数部分,先建立一个string字符串类型的对象整体接收进来:

std::string input;
std::vector<std::string> values;
// 读取一行输入
std::getline(std::cin, input);

然后我们创建一个字符串流对象ss,它将帮助我们逐个提取输入数据中的字符串。将input传递给ss,这样我们可以使用ss来逐个提取字符串。

std::istringstream ss(input);

接下来我们使用getline函数和逗号作为分隔符,从ss中逐个提取字符串,并将其存储在token中。这个循环会持续执行,直到没有更多的逗号分隔的字符串。 

std::string token;
	while (std::getline(ss, token, ',')) {
		// 去除双引号
		token = token.substr(1, token.size() - 2);
		values.push_back(token);
	}

在循环中,对于每一个提取的token,我们使用substr函数去除其双引号,以获得不包含引号的字符串,并将其添加到values中去,最终我们得到了一个包含所有提取的字符串的values,接下来就可以对数据进行需要的处理操作了。

尾语

目前小编就遇到过这俩种忒别难搞的数据输入格式,剩下的还确实没遇到过,如果各位看官还有遇到什么搞不定的输入格式也欢迎给小编留言或者私信,小编后续也会在本文中相应的添加给出解决办法的。

最后,写文不易,不收藏也请给个赞,谢谢亲~! 

(本文仅供学习时参考,如有错误,纯属作者技术不到位,不足之处请多指教,谢谢)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值