按照指定规则对输入的字符串进行处理。
详细描述:
将输入的两个字符串合并。
对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。
对排训后的字符串进行操作,如果字符为‘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; }