[英]How do I split up a string of binary to compare each digit?
我必須采用任意長度的二進制字符串,將字符串塞滿,直到可以將其分成3組為止。假設我有一個字符串5,我在它的右端添加了一個0,使其成為字符串6。然后將它們分成3個並與XOR運算符比較相同的數字。 我知道如何用0填充二進制字符串,直到可以將其拆分為3,但是我不知道如何將其拆分為3並比較數字。 這是我用0填充的代碼。
string binary;
cin >> binary;
while(binary.length() < 6){
binary = "0" + binary;
}
while(binary.length()%3 != 0){
binary = "0" + binary;
}
int size = binary.length();
只需使用for-loop
遍歷字符串並創建新字符串,將其添加到動態數組即可,然后可以遍歷動態數組
string *a = new string[ binary.length() ];
for(int i = 0; i <= binary.length() - 3; i +=3 )
{
a[i/3] = binary.substr(i, 3);
}
//now you have array of 3 length splitted parts
delete[] a;
編輯
如果您不需要將子字符串的三元組保留為xor子字符串的每個第一,第二和第三元素,則只需使用
//to convert char to int I'm subtracting 48 from its ASCII
int xors[3] = { (int)binary[0] - 48, (int)binary[3] - 48, (int)binary[2] - 48, };
for(int i = 3; i <= binary.length() - 3; i +=3 )
{
xors[0] ^= (int)binary[i] - 48;
xors[1] ^= (int)binary[i+1] - 48;
xors[2] ^= (int)binary[i+2] - 48;
}
如果您想保留三元組,則在上面重復使用代碼並對其進行迭代處理,如下所示
為什么要轉換為整數? 可以使用std::string
;-)完成所有可運行程序。 唯一的要求是,初始字符串digits
為3 digits
長。 省略了任何預處理(例如添加填充'0')。
只需將3
的值更改為所需的分組長度(並確保輸入長度至少如此長),該程序就可以輕松地適應將不同位數組合在一起的情況。
#include <string>
#include <iostream>
using namespace std;
int main() {
// Assume string has been made at least six long; although we settle for 3
string digits("000111101");
string::iterator ptr = next(digits.begin(), 3);
// copy first N digits into our accumulators
string xors(digits.begin(), ptr);
string::size_type idx = 0;
// Aggregate-xor the remaining digits
while( ptr!=digits.end() ) {
xors[ idx ] = (xors[idx]!=*ptr) ? '1' : '0';
ptr++, idx = (idx + 1) % xors.size();
}
cout << "Final xor'ed bits: " << xors << endl;
}
輸出:
Final xor'ed bits: 010
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.