我正在尝试使用字符串执行二进制加法。当使用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;
答案 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() );