题目描述
请实现一个函数,功能为合并两个升序数组为一个升序数组
输入描述:
输入有多个测试用例,每个测试用例有1-2行,每行都是以英文逗号分隔从小到大排列的数字
输出描述:
输出一行以英文逗号分隔从小到大排列的数组
示例1
输入
1,5,7,9
2,3,4,6,8,10
/*
* @Descripttion:
* @version:
* @Author: iDestro
* @Date: 2020-03-13 23:02:03
* @LastEditors: iDestro
* @LastEditTime: 2020-03-13 23:25:45
*/
#include <iostream>
#include <vector>
#include <sstream>
using namespace std;
vector<int> spilt2int(string nums, char ch) {
int s = 0, len = nums.length();
vector<int> res;
for (int i = 0; i < len; i++) {
if (nums[i] == ch) {
res.push_back(s);
s = 0;
} else {
s = s * 10 + nums[i]-'0';
if (i == len-1) {
res.push_back(s);
break;
}
}
}
return res;
}
int main() {
string str_nums0, str_nums1;
cin >> str_nums0 >> str_nums1;
vector<int> nums0, nums1;
nums0 = spilt2int(str_nums0, ',');
nums1 = spilt2int(str_nums1, ',');
// for (int i = 0; i < nums0.size(); i++) {
// cout << nums0[i] << ' ';
// }
vector<int> res;
int i = 0, j = 0;
while (i < nums0.size() && j < nums1.size()) {
if (nums0[i] > nums1[j]) {
res.push_back(nums1[j]);
j++;
} else {
res.push_back(nums0[i]);
i++;
}
}
while (i < nums0.size()) res.push_back(nums0[i++]);
while (j < nums1.size()) res.push_back(nums1[j++]);
for (int i = 0; i < res.size(); i++) {
cout << res[i];
if (i != res.size()-1) {
cout << ',';
}
}
}
输出
1,2,3,4,5,6,7,8,9,10
常规解法:
C++没有现成的split函数,需要自己写一个,逻辑很简单,组合操作也很简单,直接上代码了。