# Bit Manipulation# String Processing# Output Formatting

d167 - 編碼轉譯

🔗 前往 ZeroJudge 原題

題目描述

題目要求將輸入的字串轉換成一種特殊的編碼形式,其中每個字元被轉換成一個由 'o' 和 ' ' 組成的 8 位元字串,並在中間插入一個 '.' 作為分隔符。

解題思路

程式碼的核心邏輯是將每個字元的 ASCII 值轉換為二進制表示,然後用 'o' 代表 1,用 ' ' 代表 0。由於題目要求的輸出格式,程式碼將二進制字串分成兩部分,中間插入 '.'。

程式首先讀取輸入字串,然後對字串中的每個字元進行處理。對於每個字元,程式將其 ASCII 值轉換為二進制表示,並將二進制位儲存在 aa 陣列中。最後,程式按照題目要求的格式輸出編碼後的字串,並在每個字元之間加上 '|' 和 '__________' 作為分隔符。

複雜度分析

  • 時間複雜度: O(n*8),其中 n 是輸入字串的長度。因為需要遍歷字串中的每個字元,並對每個字元進行 8 次的位元操作。
  • 空間複雜度: O(1),因為程式只使用了固定大小的陣列 aa,其大小為 8。

程式碼

#include <iostream>
using namespace std;
int main(){
	string a;
	char aa[8];
	while(getline(cin,a)){
		cout << "___________\n";
		a+='\n';
		int al=a.length();
		for(int it=0;it<al;++it){
			cout << "|";
			int b=a[it];
			for(int i=0;i<8;++i){
				if(b%2)
					aa[i]='o';
				else
					aa[i]=' ';
				b/=2;
			}
			for(int i=7;i>=0;--i){
				cout << aa[i];
				if(i==3)cout << ".";
			}
			cout << "|\n"; 
		}
			cout << "___________\n";
	}
}

Discussion