我必须在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'];
               });

07-24 12:42