在c ++中使用带有字符串的if语句

时间:2014-09-20 21:04:18

标签: c++ if-statement c-strings

我正在尝试使用字符串执行二进制加法。当使用if语句时,我总是得到输出"没有进入ifs"。请帮助我,告诉我是否有任何不良做法或任何错误。初学者用c ++。

while(k >= 0)
{
    if (Bin_input1[k] == 0 && Bin_input2[k] == 0)
    {
        if (carry == 0)
        {
            Bin_output[k] = 0;
            cout <<Bin_output[k] << endl;
            carry = 0;
            k = k-1;
        }
        else
        {
            Bin_output[k] = 1;
            cout <<Bin_output[k] << endl;
            carry = 0;
            k = k-1;
        }
    }
    else if (Bin_input1[k] == 0 && Bin_input2[k] == 1)
    {
        if (carry == 0)
        {
            Bin_output[k] = 1;
            cout <<Bin_output[k] << endl;
            k = k-1;
        }
        else
        {
            Bin_output[k] = 1;
            cout <<Bin_output[k] << endl;
            carry = 1;
            k = k-1;
        }
    }
    else if (Bin_input1[k] == 1 && Bin_input2[k] == 0)
    {
        if (carry == 0)
        {
            Bin_output[k] = 1;
            cout <<Bin_output[k] << endl;
            k = k-1;
        }
        else
        {
            Bin_output[k] = 1;
            cout <<Bin_output[k] << endl;
            carry = 1;
            k = k-1;
        }
    }
    else if (Bin_input1[k] == 1 && Bin_input2[k] == 1)
    {
        {
            Bin_output[k] = 1;
            cout <<Bin_output[k] << endl;
            carry = 1;
            k = k-1;
        }
    }
    else
        cout<< "did not go in ifs" << endl ;

    k = k - 1;
}
return Bin_output;

2 个答案:

答案 0 :(得分:1)

您需要将字符与字符常量'0''1'进行比较,而不是将整数值0和1进行比较。例如:

if( Bin_input1[k] == '0' && Bin_input2[k] == '0' )

答案 1 :(得分:0)

据我所知,字符串包含字符'0'和'1'。它们具有整数代码(在ASCII中)48和49.因此,您必须将这些字符串的元素与这些代码或这些符号“0”和“1”进行比较。

代码可能看起来更简单

carry = 0;

while ( k >= 0 )
{
    int sum = ( Bin_input1[k] - '0' ) + ( Bin_input2[k] -'0' ) + carry;

    Bin_output[k] = sum % 2 + '0';
    carry = sum / 2;
    --k;
} 

考虑到由于携带结果字符串可能比其他两个字符串大一个字符。你必须处理这个案子。

如果Bin_input1和Bin_input2的长度相等,那么我会按以下方式编写循环

#include <algorithm>
#include <string>

//...

std::string Bin_output;

Bin_output.reserve( Bin_input1.length() + 1 );
int carry = 0;

for ( std::string::size_type i = Bin_input1.size(); i != 0; --i )
{
    int sum = ( Bin_input1[i - 1] - '0' ) + ( Bin_input2[i - 1] - '0' ) + carry;

    carry = sum / 2;

    Bin_output.push_back( sum % 2 + '0' );
}

if ( carry ) Bin_output.push_back( carry );

std::reverse( Bin_output.begin(), Bin_output.end() );