简记华为FX笔试题(二)之字符串输入

题目自己定的,具体叫啥笔者也不是很清楚,题意大体如下

输入一串字符串,以英文逗号分隔,如 A1,B2,C3,a9,d0,然后按照每个字符串最后一个数字的ASCII码作为优先级,按照优先级

从高到底输出出栈的字符串,同样以英文逗号作为分隔,优先级相同的话,入栈顺序就是出栈顺序。输出

a9,c3,B2,A1,d0

这道题主要考了字符串分割,以及对栈的理解,代码也不是很难,先分享笔者当时的代码,case全过,不过不记得是不是这个

版本了,大体意思差不多。

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

vector<string> split(const string s, char seperator) {
	vector<string> result;
	typedef string::size_type string_size; 
	string_size i = 0;
	string_size j = 0;
	for (i = 0; i < s.size(); i++)
	{
		if (s[i] == seperator)
		{
			result.push_back(s.substr(j, i - j));
			j = i + 1;
		}
	}
	if (s[s.size() - 1] != seperator) result.push_back(s.substr(s.rfind(seperator) + 1));
	else if (s[s.size() - 1] == seperator)result.push_back("");
	return result;
}

bool compare(string a, string b)
{
	return a[a.size() - 1] > b[b.size() - 1];
}
int main()
{
	string input;
	
	while (getline(cin, input))
	{
		vector<string> vec;
		vec = split(input,',');//先将字符串按照,分割
		stable_sort(vec.begin(), vec.end(), compare);//再按照最后一个字符的ASCII码大小排序
		for (int i = vec.size() - 1; i > 0; i--)
			cout << vec[i] << ',';
		cout << vec[0] << endl;
	}
	
    return 0;
}

猜你喜欢

转载自blog.csdn.net/hjxu2016/article/details/80959243