用C ++连接两个字符串(二进制数加法)

时间:2014-10-28 16:41:46

标签: c++ binary string-concatenation addition

我在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

后来我想把这个字符串转换成int数组,因此我可以使用全加法算法:

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); 
}

关于如何解决添加两个不同大小二进制数的问题的建议也非常受欢迎。

编辑: 好的,所以我尝试使用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];

}

1 个答案:

答案 0 :(得分: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;
}