牛客網-華為-2020屆校園招聘上機考試-1


題目描述
在計算機系統內存在兩種字節序:大端和小端
大端(Big_Endian)就是高位字節排放在內存的低地址端,低位字節排放在內存的高地址端。
小端(Little_Endian)就是低位字節排放在內存的低地址端,高位字節排放在內存的高地址端。

以數字0x12345678為例:
大端(Big_Endian)低地址到高地址依次為“0x12 | 0x34 | 0x56 | 0x78”
小端(Little_Endian)低地址到高地址依次為“0x78 | 0x56 | 0x34 | 0x12”

現定義一種字符編碼,其編碼格式如下:
9個字符為一個編碼組
第一個字符表示后續8個字符的字節序(字符‘0’表示小端,字符‘1’表示大端)
后續8個字符,每個字符代表一個字節
編碼解析之后字符串采用大端模式

輸入描述:
第一行為數字N,表示后續輸入的字符串有多少個編碼組
第二行為編碼字符串
輸出描述
輸出為一行,包含N個編碼組解析結果(大端模式),每個結果以一個空格分隔,行末無空格。

示例1
輸入
2
0abcdefgh1abcdefgh
輸出
hgfedcba abcdefgh

1.思考

  • 當每個編碼組以‘0’開頭,則之后8個字符串逆序輸出;
  • 當每個編碼組以‘1’開頭,則之后8個字符串順序輸出;
  • 注意輸出的空格和換行符。

2.實現

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

string LittleEndian(string& s)
{
	int len = s.size();
	string res;
	res = s;
	for (int i = 0; i < len; i++){
		res[i] = s[len - 1 - i];
	}
	return res;
}

int main(){
	int n;
	string input, res;

	while (cin>>n>>input){
		int f;
		string s;
		for (int i = 0; i < n; i++){
			f = input[i * 9] - '0';
			s = input.substr(i*9+1, 8);
			if (f == 0){
				res = LittleEndian(s);
				cout << res;
			}
			else{
				cout << s;
			}
			if (i < n-1){
				cout << " ";
			}
			else{
				cout << endl;
			}
		}
	}

	return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM