我必须在c++中编写一个函数,其中输入是2个二进制字符串,输出必须是一个与两个输入字符串按位与的字符串。同样,输出必须具有两个输入中较短的长度。
例如
如果输入为:“0b000000”,“0b000000”
输出为:“0b000000”
如果输入为:“0b10101010”,“0b11111111”
输出为:“0b10101010”
如果输入为:“0b10”,“0b11111111”
输出为:“0b10”
如果输入为:“0b10101110”,“0b101”
输出为:“0b100”
这是我的代码:
string binaryAND(const string &number1, const string &number2) {
string first_sol = "";
string sol = "0b";
if (number1.length() < number2.length()) {
string number11 = "";
string number22 = "";
for (int i = 2; i < number1.size(); i++){
number11 += number1[i];
}
for (int i = 2; i < number2.size(); i++){
number22 += number2[i];
}
int num1_z = stoi(number11, nullptr, 2);
int num2_z = stoi(number22, nullptr, 2);
int sol_int = (num1_z & num2_z);
int i = number11.size();
while (i > -1){
first_sol = to_string(sol_int % 2) + first_sol;
sol_int /= 2;
i--;
}
sol += first_sol;
return sol;
}
if (number1.length() >= number2.length()){
string number11 = "";
string number22 = "";
for (int i = 2; i < number1.size(); i++){
number11 += number1[i];
}
for (int i = 2; i < number2.size(); i++){
number22 += number2[i];
}
int num1_z = stoi(number11, nullptr, 2);
int num2_z = stoi(number22, nullptr, 2);
int sol_int = (num1_z & num2_z);
int i = number22.size();
while (i > -1){
first_sol = to_string(sol_int % 2) + first_sol;
sol_int /= 2;
i--;
}
sol += first_sol;
return sol;
}
}
编辑:
但这行不通。 “0b”后面的输出比应有的多一个0。
例如,输出应为:“0b000000”
但它是:“0b0000000”
应为:“0b10101010”
但它是:“0b010101010”
应为:“0b100”
但它是:“0b0100”
我不知道如何更正代码。有什么想法吗?
最佳答案
您的表达式无效:
sol + first_sol;
您可能打算使用
sol += first_sol;
在编辑版本中,您可能仍然经常迭代:使用
while (i > 0)
我个人建议一种更简单的方法:
std::string result;
auto min = std::min(number1.size(), number2.size());
std::transform(number1.begin(), number1.begin() + min,
number2.begin(),
std::back_inserter(result),
[](char a, char b){
return a == 'b'? 'b': "01"[a == '1' && b == '1'];
});