2014-09-20 53 views
-4

我正在尝试使用字符串执行二进制添加。当使用if语句时,我总是得到输出“没有进入ifs”。请帮助我,告诉我,如果我做任何不良练习或任何错误。初学者在C + +。在C++中使用带有字符串的if语句

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!='0''去。 – chris 2014-09-20 21:06:41

+0

什么是'Bin_input1'?如果它是一个'char'数组,你不想与0和1进行比较。 – 2014-09-20 21:07:11

+1

无法编译和测试... – Deduplicator 2014-09-20 21:08:32

回答

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()); 
+1

这显然是一个更好的算法,但它不是问题的答案。聪明的算法都非常好,但理解字符常量和字面整数之间的差异可能更基本。 – Clifford 2014-09-20 21:50:02

+0

@Clifford该算法包含您的问题的答案。看看我如何用字符串计算表达式。 – 2014-09-20 21:56:53

+1

这不是我的问题。我在另一个答案中直接回答了这个问题。将数字字符转换为整数值与将字符与字符常量进行比较不是一回事。这对于OP的应用来说是一个更好的解决方案,但他并没有询问如何实施该解决方案,而仅仅是为什么他的条件陈述没有被解决为“真实”。如果他提交的代码比他的导师所认为的“更聪明”,那么他将面对剽窃指控。 – Clifford 2014-09-20 22:04:20

1

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

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