C++ 带逗号输入数组(大厂笔试输入出现多次)

这篇博客展示了多种处理C++中逗号分隔输入的方法,包括读取未知数量元素、指定元素个数、二维数组区间问题以及构建和遍历二叉树。此外,还涵盖了处理多组带空格字符串和单行字符串转二维数组的场景,演示了C++中处理字符串和数组转换的实用技巧。
摘要由CSDN通过智能技术生成

1、第一种情况(带逗号输入,元素个数未知)

输入形式:

输入的数据在nums中保存

1,2,3,4,60,70,5
# include<iostream>
# include<vector>
# include<string>
using namespace std;

int main() {
	//输入
	string s;
	cin >> s;
	int start = 0;
	int num = 0;
	vector<int> nums;
	for (int i = 0; i < s.size(); i++) {
		if (s[i] == ',') {
			string temp = s.substr(start, i - start);
			nums.push_back(atoi(temp.c_str()));
			num++;
			start = i + 1;
		}
	}
	string temp = s.substr(start, s.size() - start + 1);
	nums.push_back(atoi(temp.c_str()));
	//打印验证
	for (int i = 0; i < nums.size(); i++) {
		cout << nums[i] << " ";
	}

	system("pause");
	return 0;
}

2、第二种情况(带逗号输入,告诉元素个数)

输入形式:

在nums 数组中保存

8
1,2,30,100,50,2,7,5

输出形式:

1 2 30 100 50 2 7 5

代码:

# include<iostream>
# include<vector>
# include<string>
using namespace std;

int main() {
	//输入
	int n;
	cin >> n;
	string s;
	cin >> s;
	int start = 0;
	int num = 0;
	vector<int> nums;
	for (int i = 0; i < s.size(); i++) {
		if (s[i] == ',') {
			string temp = s.substr(start, i - start);
			nums.push_back(atoi(temp.c_str()));
			num++;
			start = i + 1;
		}
		if (num == n - 1) {
			string temp = s.substr(start, s.size() - start + 1);
			nums.push_back(atoi(temp.c_str()));
			break;
		}
	}
	//打印验证
	for (int i = 0; i < n; i++) {
		cout << nums[i] << " ";
	}

	system("pause");
	return 0;
}

3、第三种情况(区间问题,带逗号输入,二维数组)

非重叠区间的总长度

在nums 二维数组中保存

# include<iostream>
# include<vector>
# include<string>
# include<algorithm>
using namespace std;


static bool cmp(vector<int>& a, vector<int>& b) {
	if (a[0] == b[0]) {
		return a[1] < b[1];
	}
	return a[0] < b[0];
}

int main() {
	//输入
	int n;
	cin >> n;
	vector<string> str;
	for (int i = 0; i < n; i++) {
		string mys;
		cin >> mys;
		str.push_back(mys);
	}
	vector<vector<int>> nums;
	int t = 0;
	while (t < n) {
		vector<int> q;
		string s = str[t];
		int start = 0;
		int num = 0;
		for (int i = 0; i < s.size(); i++) {
			if (s[i] == ',') {
				string temp = s.substr(start, i - start);
				q.push_back(atoi(temp.c_str()));
				num++;
				start = i + 1;
			}
			if (num == 1) {
				string temp = s.substr(start, s.size() - start + 1);
				q.push_back(atoi(temp.c_str()));
				break;
			}
		}
		t++;
		nums.push_back(q);
	}
	//打印输出验证
	for (int i = 0; i < nums.size(); i++) {
		for (int j = 0; j < nums[0].size(); j++) {
			cout << nums[i][j] << " ";
		}

		cout << endl;
	}

	//算法实现
	sort(nums.begin(), nums.end(), cmp);

	int sum = 0;
	int l = nums[0][0];
	int r = nums[0][1];
	for (int i = 1; i < nums.size(); i++) {
		int l1 = nums[i][0];
		int r1 = nums[i][1];
		if (r <= l1) {
			sum += (r - l);
			l = l1;
			r = r1;
		}
		else if (r > l1 && r1 > r) {
			sum += (l1 - l);
			l = r;
			r = r1;
		}
		else if (r > l1 && r1 <= r) {
			sum += (l1 - l);
			l1 = r1;
			r = r;
		}
	}
	//算法结果
	sum += r - l;
	cout << sum << endl;

	system("pause");
	return 0;
}

4、第四种情况(二叉树的建立,带逗号以及“NULL”)

二叉树的创建与各种遍历,华为,网易的笔试都遇到了

# include<iostream>
# include<vector>
# include<queue>

using namespace std;

struct TreeNode {
	int val;
	TreeNode* left;
	TreeNode* right;
	TreeNode(int val) : val(val), left(NULL), right(NULL) {}
};

TreeNode* buildTree(vector<string> str) {
	if (str.size() == 0) {
		return 0;
	}
	queue<TreeNode*> qe;
	TreeNode* head = new TreeNode(atoi(str[0].c_str()));
	qe.push(head);
	for (int i = 1; i < str.size(); i++) {
		auto temp = qe.front();
		qe.pop();
		if (str[i] != "NULL") {
			temp->left = new TreeNode(atoi(str[i].c_str()));
			qe.push(temp->left);
		}
		if (i + 1 < str.size() && str[i + 1] != "NULL") {
			temp->right = new TreeNode(atoi(str[i + 1].c_str()));
			qe.push(temp->right);
		}
		i++;
	}
	return head;
}

void midSearch(vector<int>& nums, TreeNode* cur) {
	if (!cur) {
		return;
	}
	midSearch(nums, cur->left);
	nums.push_back(cur->val);
	midSearch(nums, cur->right);
}

void inorSearch(vector<int>& nums, TreeNode* cur) {
	if (!cur) {
		return;
	}
	inorSearch(nums, cur->left);
	inorSearch(nums, cur->right);
	nums.push_back(cur->val);
}

void prioSearch(vector<int>& nums, TreeNode* cur) {
	if (!cur) {
		return;
	}

	nums.push_back(cur->val);
	prioSearch(nums, cur->left);
	prioSearch(nums, cur->right);
}

void chengciSearch(vector<int>& nums, TreeNode* cur) {

	queue<TreeNode*> qe;
	qe.push(cur);
	
	while (!qe.empty()) {
		auto temp = qe.front();
		qe.pop();
		nums.push_back(temp->val);
		if (temp->left) {
			qe.push(temp->left);
		}
		if (temp->right) {
			qe.push(temp->right);
		}
	}
}

int main() {
	string mys;
	cin >> mys;
	vector<string> str;
	string temp;
	for (auto t : mys) {
		if (t == ',') {
			str.push_back(temp);
			temp.clear();
		}
		else {
			temp.push_back(t);
		}
	}
	str.push_back(temp);

	TreeNode* cur = buildTree(str);

	vector<int> result;
	cout << "先序遍历" << endl;

	prioSearch(result, cur);

	for (int i = 0; i < result.size(); i++) {
		cout << result[i] << " ";
	}

	cout << endl;
	result.clear();
	cout << "层序遍历" << endl;
	chengciSearch(result, cur);

	for (int i = 0; i < result.size(); i++) {
		cout << result[i] << " ";
	}

	cout << endl;
	cout << "中序遍历" << endl;
	result.clear();

	midSearch(result, cur);

	for (int i = 0; i < result.size(); i++) {
		cout << result[i] << " ";
	}

	cout << endl;
	cout << "后序遍历" << endl;
	result.clear();

	midSearch(result, cur);

	for (int i = 0; i < result.size(); i++) {
		cout << result[i] << " ";
	}

	system("pause");
	return 0;
}

验证1:

 验证2:

5、第五种情况 输入多组带空格的字符串

输入形式:

N组

N行字符串

N
SADSA SDAD SADASD ASDA
ASDAS SDASD ASDSA ASDAS
.
.
.
DSAD SDAS SDAS ASDA

 代码:

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

using namespace std;

int main() {
    //输入
	string N;
	getline(cin, N);

	int n = atoi(N.c_str());
	vector<string> str;
	while (n--) {
		string temp;
		getline(cin, temp);
		str.push_back(temp);
	}
    //输出验证
	for (int i = 0; i < str.size(); i++) {
		cout << str[i] << endl;
	}

	system("pause");
	return 0;
}
2
ASDASDAS ASDASDA ASDAS ASD AS
DASD ASD ASAD ASDAD AS

 数组输出:
ASDASDAS ASDASDA ASDAS ASD AS
DASD ASD ASAD ASDAD AS
请按任意键继续. . .

6、第六种情况 单行带空格字符串,转换为二维数组

输入:1,2 3,45 78,56 11,12


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

using namespace std;


int main() {
	string s;
	getline(cin, s);
	int start1 = 0;
	vector<string> str;

	for (int i = 0; i < s.size(); i++) {
		if (s[i] == ' ') {
			string temp = s.substr(start1, i - start1);
			str.push_back(temp);
			start1 = i + 1;
		}
	}
	string temp = s.substr(start1, s.size() - start1 + 1);
	str.push_back(temp);


	vector<vector<int>> nums;
	int t = 0;
	while (t < str.size()) {
		vector<int> q;
		string s = str[t];
		int start = 0;
		int num = 0;
		for (int i = 0; i < s.size(); i++) {
			if (s[i] == ',') {
				string temp = s.substr(start, i - start);
				q.push_back(atoi(temp.c_str()));
				num++;
				start = i + 1;
			}
			if (num == 1) {
				string temp = s.substr(start, s.size() - start + 1);
				q.push_back(atoi(temp.c_str()));
				break;
			}
		}
		t++;
		nums.push_back(q);
	}

}

结果展示: 

12,45 56,34 75,65 128,1
输出
12 45
56 34
75 65
128 1
请按任意键继续. . .

7、第七种情况 带空格输入,不告诉元素个数

#include <iostream>
#include <vector>
using namespace std;

int main() {
	//p a, b;
	vector<int> nums;
	do {
		int temp;
		scanf_s("%d", &temp);
		nums.push_back(temp);
	} while (getchar() != '\n');

	for (int i = 0; i < nums.size(); i++) {
		cout << nums[i] << " ";
	}
	cout << endl;

	system("pause");
	return 0;
}

  • 22
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: HTML中的文本框是用来输入单个值的,不能直接输入数组。但是,你可以通过在文本框中输入一系列值,并用特定的分隔符(如逗号)将它们分开,然后使用JavaScript将它们分割成数组。 以下是一个示例代码,用于将文本框中的逗号分隔值转换为数组: ```html <input type="text" id="inputArray" value="1,2,3,4,5"> <button onclick="convertToArray()">转换为数组</button> <script> function convertToArray() { var input = document.getElementById("inputArray").value; var array = input.split(","); console.log(array); } </script> ``` 在这个示例中,我们首先使用HTML创建了一个文本框和一个按钮。当用户输入一串逗号分隔的值后,单击按钮将触发JavaScript函数`convertToArray()`。这个函数将文本框的值作为输入,并使用JavaScript的`split()`函数将其转换为一个数组。最后,它将数组输出到浏览器的控制台中。 希望这个示例对你有所帮助! ### 回答2: 在HTML中,我们不能直接使用文本框输入数组。然而,我们可以通过文本框输入一串值,然后将其转换为数组。 一种常见的方法是使用JavaScript来实现这一功能。我们可以通过在HTML中添加一个文本框和一个按钮来实现。首先,创建一个文本框元素和一个按钮元素: ``` <input type="text" id="inputVal"> <button onclick="convertToArray()">转换为数组</button> ``` 然后,在JavaScript中,我们需要编写一个函数`convertToArray()`来将输入的值转换为数组: ``` function convertToArray() { var inputVal = document.getElementById("inputVal").value; // 获取输入框的值 var array = inputVal.split(","); // 使用逗号分隔输入的值,并将其存储为数组 console.log(array); // 输出数组 } ``` 在这个例子中,我们首先通过`document.getElementById("inputVal").value`获取输入框的值。然后,我们使用`.split(",")`方法将输入的值以逗号为分隔符分割,并将其存储为数组。 最后,我们可以使用`console.log(array)`来在控制台输出转换后的数组。 这样,当我们在文本框中输入一串值,点击按钮后,就能将其转换为数组并在控制台中输出。 当然,这只是一种简单的示例。根据实际需求,我们也可以根据不同的分隔符进行数组的处理。 ### 回答3: 在HTML中,文本框本身不支持输入数组。然而,可以使用其他的HTML元素和JavaScript来实现输入和展示数组。 一种常见的方法是使用一个文本框和一个按钮。用户可以在文本框中输入多个数值之间用逗号或其他分隔符分隔开来。然后,当用户点击按钮时,可以使用JavaScript将文本框中的值分割为一个数组,并进行处理。 首先,在HTML中,需要创建一个文本框和一个按钮元素,可以使用<input>元素实现: <input type="text" id="input" placeholder="输入逗号分隔的数值"> <button onclick="parseInput()">解析</button> 在JavaScript中,需要创建一个函数来解析文本框中的值,并将其转换为数组。可以使用split()方法来根据逗号分割字符串,并使用map()方法将每个分割后的字符串转换为数值。最后,将结果存储在一个变量中,可以在之后进行处理。 function parseInput() { var input = document.getElementById("input").value; var array = input.split(",").map(Number); // 对数组进行处理,可以进行排序、筛选、计算等操作 console.log(array); // 输出数组到控制台 } 在这个例子中,用户可以输入类似"1,2,3,4,5"的文本值,然后点击按钮解析。解析后的数组可以在控制台中输出,以供进一步处理和使用。 需要注意的是,这只是一种简单的方法来实现输入数组,可以根据具体需求进行适当的修改和扩展。同时,用户输入的值需要进行验证和处理,以确保输入的格式正确和符合要求。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值