簡體   English   中英

如何拆分二進制字符串以比較每個數字?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM