2015-10-13 7 views
0

Мне нужно взять двоичную строку любой длины, наполнить строку, пока она не будет разделена на группы из 3. Скажем, у меня есть строка из 5, я добавляю 0 в ее правый конец, чтобы сделать ее строкой 6, затем разделите их на 3 и сравните одну и ту же цифру с оператором XOR. Я знаю, как записать двоичную строку с 0, пока она не будет разделена на 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(); 

ответ

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; 

EDIT

Если вы не Не нужно сохранять тройки подстрок на 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

почему не использовать 'зЬй :: VECTOR'? – NathanOliver

+0

уверен, что вы можете - это всего лишь один из способов –

+0

Как использовать это, чтобы сравнить двоичное число? скажем, что оно заканчивается 010001, оно разрезается на 010 001, и я сравниваю первую цифру первого слагаемого с первым из второго с помощью оператора XOR. – adamvincent

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 
Смежные вопросы