2017-08-07 130 views
-5

由於某些原因,我需要經常生成字符串,使用{'0','1','2','3'}中的字符。我當前的代碼使用的push_back()函數,看起來像:C++如何用二進制格式表示字符串?

string test = "" 
test.push_back('0') 
test.push_back('2') 
test.push_back('3') // test would be "023" 

我想存儲在一個char類型或者int類型的字符串,並使用每個字符的二進制形式遞歸生成的字符串。 「023」將被存儲在char ='0010 1100'中。

您認爲二進制操作比push_back更省時嗎?如果是這樣,如何編寫代碼。

謝謝!

+1

你怎麼能區分'10'從'101',或任何其他共享前綴的二進制字符串? – Purag

+1

爲什麼在將數字的二進制表示形式添加爲字符串與將數字添加爲字符串之間會存在性能差異?無論哪種情況,您都在進行字符串連接,字符串不知道某個字符是「二進制」,因爲它們只是字符' – CoryKramer

+0

@Prag字符每個字符都將由2位完全表示。 – user2566640

回答

-2

使字符串像string s="0123"。 而且,使用next_permutation(s.begin(),s.end())來產生由0,1,2,3組成的所有數字排列。

+0

OP意味着他想要的字符串是可變長度的。這隻會產生固定長度的字符串。 – hnefatl

1

您可以使用位域,像

struct data 
{ 
    unsigned char v1 : 2; // Can only store 0, 1, 2, 3 
    unsigned char v2 : 2; 
    unsigned char v3 : 2; 
    unsigned char v4 : 2; 
}; 

然後用

std::vector<data> v; 
int nd_elem_in_last_item = 0; // to differenciate 00 from 0 and not there for final item. 

所以你的數據確實是更緊湊。

相關問題