华为OJ中级题-字符串合并处理

按照指定规则对输入的字符串进行处理。

详细描述:

将输入的两个字符串合并。

对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。

对排训后的字符串进行操作,如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符。如字符为‘4’,为0100b,则翻转后为0010b,也就是2。转换后的字符为‘2’; 如字符为‘7’,为0111b,则翻转后为1110b,也就是e。转换后的字符为大写‘E’。

举例:输入str1为”dec”,str2为”fab”,合并为“decfab”,分别对“dca”和“efb”进行排序,排序后为“abcedf”,转换后为“5D37BF”

string HWoj(char *str1,char *str2){
	//char *str1 = "dec", *str2 = "fab";
	string a, b,c;
	a.assign(str1); b.assign(str2);
	c.append(a); c.append(b);
	a.clear(); b.clear();
	cout << c << endl;
	int len = c.length();
	for (int i = 0; i < len; ++i){
		if (i % 2 == 0){
			a.push_back(c[i]);
		}
		else b.push_back(c[i]);
	}
	sort(a.begin(), a.end());
	sort(b.begin(), b.end());
	c.clear();
	int k = 0, m = 0;
	for (int i = 0; i < len; ++i){
		if (i % 2 == 0){
			c.push_back(a[k++]);
		}
		else{ c.push_back(b[m++]); }
	}

	return c;
}
char Test00(char x){
	int n = 0;
	if (x<='9'&&x>='0'){
		n = x - '0';
	}
	else if (x >= 'a'&&x <= 'f'){
		n = x - 'a' + 10;
	}
	char array[6] = { 0 };
	//cout << n << endl;
	_itoa_s(n, array, 2);
	//cout << array << endl;
	string tmp = (string)(array), str;
	if (tmp.size() < 4)
	{
		string tmp2(4 - tmp.size(), '0');
		str = tmp2 + tmp;
	}
	else str = tmp;
	reverse(str.begin(), str.end());
	//cout << str << endl;
	int result = 0, i = 0;
	char ch;
	while (str[i] != '\0')
		result = (result << 1) + (str[i++] - '0');
	if (result > 9){
		result = result - 10 + 'a';
		ch = (char)result;
		ch = toupper(ch);
	}
	else{
		result = result + '0';
		ch = (char)result;	
	}
	return ch;
}
void HWoj2(string str,char *strOutput){
	int len = str.length();
	for (int i = 0; i < len; ++i){
		strOutput[i] = Test00(str[i]);
	}
}
void ProcessString(char *str1, char *str2, char *strOupt){
	string str;
	str=HWoj(str1, str2);
	HWoj2(str, strOupt);
}
int main(){
	char *str1 = "dec", *str2 = "fab",*strOupt;
	ProcessString(str1, str2, strOupt);
	cout << strOupt << endl;
	return 0;
}


你可能感兴趣的:(C++,华为)