У меня проблема с конкатенацией двух строк в 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];
}
temp2 не 0 завершающим. strcat будет испорчен, возможно, даже segfaulting на своем пути к первому 0 char. –
Это для образовательной цели? В противном случае я бы рекомендовал использовать ['std :: bitset'] (http://en.cppreference.com/w/cpp/utility/bitset) и' std :: string'. –
1) Как завершить строку temp2 так, чтобы strcat не испортился? 2) Вы имеете в виду сдвиг каждого символа вправо и добавление «0» в начале? Не знаю, как использовать функцию std :: bitset, поэтому некоторый пример будет приятным, поскольку я только начинаю знать некоторые основы в C++ 3) Разные размеры двоичных чисел не будут проблематичными при использовании битовой библиотеки? – user4165421