在C++中连接两个字符串(二进制数增加) 我在C++中连接两个字符串有问题。我想做的是转换一个由用户输入的二进制数,并对齐其长度,以便我可以进一步添加两个输入的数字。我使用字符串数组进行输入: char* num1, num2;
例如,用户键入两个数字:在C++中连接两个字符串(二进制数增加) 我在C++中连接两个字符串有问题。我想做的是转换一个由用户输入的二进制数,并对齐其长度,以便我可以进一步添加两个输入的数字。我使用字符串数组进行输入: char* num1, num2;,c++,binary,string-concatenation,addition,C++,Binary,String Concatenation,Addition,例如,用户键入两个数字: 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); 后来我想把这个字符串转换成int数组,这样我就可以使用全加算法
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);
后来我想把这个字符串转换成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];
}
temp2不是以0结尾的。strcat将出错,甚至可能在到达第一个0字符的过程中出错。这是出于教育目的吗?否则,我建议使用和std::string.1如何终止temp2字符串,以便strcat不会出错?2你的意思是将每个字符右移并在开头加0吗?关于如何使用STD::BITSET函数没有线索,所以一些例子很好,因为我刚开始了解C++中的一些基本知识。在使用BITSeSET库时,不同大小的二进制数不会有问题。@ USS41654:是的,STD::BIT是固定长度的位。如果它们是动态的,可以使用std::vector或boost::dynamic_bitset。您需要类似于
#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];
}
#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;
}