2020届华为软开实习笔试题——字符重排答案

问题重述
题目一:
现有多组整数数组,需要将他们合并成一个新的数组。合并规则,从每个数组按顺序
取出固定长度的内容合并到新的数组中,取完的内容会删除掉,如果该行不足固定长度
或者已经为空,则直接取出剩余部分的内容放到新的数组中,继续下行。如样例1,
获得长度3,先遍历第一行,获得2.5.6 ;再遍历第二行,获得1,7.4;再循环回到第行.
获得7,9,5 ;再遍历第二行,获得1,7,4;再循环回到第1行,获得7.按顺序拼接成最终结果

输入描述:

第一行是每次读取的固定长度,长度>0 ,第2-n行是需要合并的数组,不同的数组用回车换行分隔,数组内部用建号分隔

输出描述:

输出一新的数组,用逗号分隔。

输入:
3
2,5,6,7,9,5,7
1,7,4,3,4
输出:
2,5,6,1,7,4,7,9,5,3,4,7

代码运行截图:
在这里插入图片描述
在这里插入图片描述
代码:

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

using namespace std;
void str_cut(vector<string>str_in, int cut_len);
int find_end(string str);
string result = "";
int main()
{
	vector<string> v_str;
	string _str;
	int cut_len;
	cin >> cut_len;
	getchar();//获取换行符
	while (getline(cin, _str))
	{
		if (!_str.empty()) 
		{
			v_str.push_back(_str);
		}
		else
		{
			break;
		}
	}
	str_cut(v_str, cut_len);
	cout << result << endl;
	system("pause");
	return 0;
}

void str_cut(vector<string>str_in,int cut_len)//循环处理str_in
{
	string copy = "";
	static int size_;
	size_ = str_in.size();
	while (size_ > 0)
	{
		for (int i = 0; i <str_in.size(); i++)
		{
			if (str_in[i].size() > 0)//!(str_in[i].empty)第i个字符数组不为空
			{
				int num = 0, pos;
				while (num < cut_len)
				{
					pos = str_in[i].find_first_of(',', 0);//','第一次出现的数组下标
					if (pos == -1)//只剩最后一个数字
					{
						copy = str_in[i].substr(0);
						result += copy;
						str_in[i].erase(0);//删除
						size_ -= 1;
						if (size_ > 0)
						{
							result += ",";
						}
						break;
					}
					copy = str_in[i].substr(0, pos + 1);
					num += 1;
					result += copy;//包含‘,’					
					str_in[i].erase(0, pos + 1);//删除
				}				
			}
		}
	}
}

喜欢的朋友留个赞支持一下吧_

发布了18 篇原创文章 · 获赞 10 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41135605/article/details/89477928
今日推荐