如何拆分二进制字符串来比较每个数字?

时间:2015-10-13 17:26:22

标签: c++ binary xor

我必须取一个任意长度的二进制字符串,填充字符串直到它可以被分成3个组。假设我有一个5的字符串,我在它的右端添加一个0使它成为一个字符串为6,然后将它们分成3,并将相同的数字与XOR运算符进行比较。我知道如何将二进制字符串填入0' s,直到它能够被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();

2 个答案:

答案 0 :(得分:0)

使用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;
}

如果你想保持三元组迭代使用上面的代码并迭代它像这里一样处理它

答案 1 :(得分:0)

为什么要转换为整数?可以使用std::string ;-)完成所有操作 完成可运行程序。唯一要求是初始字符串digits长3。没有任何预处理(例如添加填充'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