2014-10-28 3 views
0

У меня проблема с конкатенацией двух строк в C++. Я хочу сделать, чтобы преобразовать двоичный номер, введенный пользователем, и выровнять его длину, чтобы я мог добавить два введенных числа. Я использую массив строки для ввода цели:Объединение двух строк в C++ (добавление двоичных чисел)

char* num1, num2; 

Например типов пользователей два числа:

100010 
1010 

И я хочу, чтобы обработать их со следующей структурой:

100010 
001010 

В зависимости от того, какая строка больше в цикле, я создаю другую строку, где я добавляю отсутствующие нули:

char temp2[x]; 
    for (int i=0; i <(x-y); i++) //x,y is strlen(num1 or num2) 
    temp2[i]=48; 
    strcat(temp2, num2); 

К сожалению, некоторые странные символы появляются между двумя строками и вторая строка выглядит следующим образом:

00d↑ą,@1010 not simply 001010 

Позже я хотел, чтобы преобразовать эту строку в массив междунар таким образом, я мог бы использовать полный алгоритм сумматор:

for(i = 0; i < lengthofString ; i++){ 
sum[i] = ((a[i]^b[i])^c); // c is carry 
c = ((a[i] & b[i]) | (a[i] & c)) | (b[i] & c); 
} 

Консультирование о том, как решить проблему с добавлением двоичных чисел двух разных размеров, также очень приветствуется.

EDIT: ОК, поэтому я попытался использовать библиотеку std :: bitset, но я не знаю, правильно ли написана какая-либо часть кода. К сожалению, у меня нет доступа к компилятору (с помощью планшета Android). Результат моей работы:

#include <bitset> 
#include <iostream> 
#include "binary.h" 

using namespace std; 

void binary::add(string string1, string string2){ 

cin >> string1; 
cin >> string2; 

bitset<20> num1 (string1); 
bitset<20> num2 (string2); 

// not sure how to use loop operators with bitset as it's my very first piece of code and do I need to assign "c" argument first? 

for(int i = 0; i < 20 ; i++){ 
sum[i] = ((num1[i]^num2[i])^c); // c is carry 
c = ((num1[i] & num2[i]) | (num1[i] & c)) | (num2[i] & c); 
} 

for (int j=0; i < 20; j++) 
cout << sum[j]; 

} 
+0

temp2 не 0 завершающим. strcat будет испорчен, возможно, даже segfaulting на своем пути к первому 0 char. –

+1

Это для образовательной цели? В противном случае я бы рекомендовал использовать ['std :: bitset'] (http://en.cppreference.com/w/cpp/utility/bitset) и' std :: string'. –

+0

1) Как завершить строку temp2 так, чтобы strcat не испортился? 2) Вы имеете в виду сдвиг каждого символа вправо и добавление «0» в начале? Не знаю, как использовать функцию std :: bitset, поэтому некоторый пример будет приятным, поскольку я только начинаю знать некоторые основы в C++ 3) Разные размеры двоичных чисел не будут проблематичными при использовании битовой библиотеки? – user4165421

ответ

0
#include <stdio.h> 
#include <string.h> 
#include <iostream> 
#include <sstream> 

using namespace std; 

main() 
{ 
    ostringstream os; 
    istringstream is; 

    float num=0; 
    int a=8; 
    b=6; 

    cin >>a>>b; 

    os << a << "."<< b; 

    is(os.str()); 
    is >> num; 

    cout << num; 
    cout << num * 2; 

    return 0; 
} 
Смежные вопросы