Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 两个二进制字符串C++的计数器_String_Count_Binary - Fatal编程技术网

String 两个二进制字符串C++的计数器

String 两个二进制字符串C++的计数器,string,count,binary,String,Count,Binary,我试图从字符串中数出两个二进制数。计数位数的最大值必须为253。短数字有效,但当我添加一些长数字时,输出是错误的。坏结果的例子是10100101010000111111,带有00001110110000010110001001110110100010110111000000001110000000000100010010111110001110001100100001010010010110110110011100011010 #include <iostream> #include

我试图从字符串中数出两个二进制数。计数位数的最大值必须为253。短数字有效,但当我添加一些长数字时,输出是错误的。坏结果的例子是10100101010000111111,带有00001110110000010110001001110110100010110111000000001110000000000100010010111110001110001100100001010010010110110110011100011010

#include <iostream>
#include <stdlib.h>
using namespace std;

bool isBinary(string b1,string b2);

int main()
{
string b1,b2;
long binary1,binary2;
int i = 0, remainder = 0, sum[254];

cout<<"Get two binary numbers:"<<endl;
cin>>b1>>b2;
binary1=atol(b1.c_str());
binary2=atol(b2.c_str());
if(isBinary(b1,b2)==true){
    while (binary1 != 0 || binary2 != 0){

    sum[i++] =(binary1 % 10 + binary2 % 10 + remainder) % 2;
    remainder =(binary1 % 10 + binary2 % 10 + remainder) / 2;
    binary1 = binary1 / 10;
    binary2 = binary2 / 10;
    }

    if (remainder != 0){
    sum[i++] = remainder;
    }
    --i;
    cout<<"Result: ";

    while (i >= 0){
    cout<<sum[i--];
    }
    cout<<endl;

}else cout<<"Wrong input"<<endl;

return 0;
}

   bool isBinary(string b1,string b2){
    bool rozhodnuti1,rozhodnuti2;

     for (int i = 0; i < b1.length();i++) {
       if (b1[i]!='0' && b1[i]!='1') {
        rozhodnuti1=false;
        break;
    }else rozhodnuti1=true;
}

for (int k = 0; k < b2.length();k++) {
    if (b2[k]!='0' && b2[k]!='1') {
        rozhodnuti2=false;
        break;
    }else rozhodnuti2=true;
}

 if(rozhodnuti1==false || rozhodnuti2==false){ return false;}
 else{ return true;}
 }

这里可能有一个问题:sum[i++] 这个表达式首先返回i的值,然后将其增加1

你是用紫色做的吗? 将其更改为++i

如果您还可以发布错误的输出,这将有所帮助,以便我们可以尝试从它开始向后移动代码

编辑2015-11-7_17:10 为了确保一切都是正确的,我添加了一个cout来检查binary1和binary2在分配atol函数的结果后所包含的内容:它们包含整数547284487和18333230,这显然不代表您在文章中给出的两个01字符串的正确二进制到整数的转换。 也许它们不知怎么地超过了环礁的容量

此外,你的数学运算结果带来了一个更奇怪的结果,即6011111101,这显然没有任何意义

你说要数数这两个数字是什么意思?也许你想要一个总数?我想就是这样。 但是,再一次,你得到的是两个有符号整数,而不是两个二进制文件,这意味着那些%10和%2操作可能被误用了

编辑2015-11-07_17:20 我试着用小的二进制字符串来使用你的程序,它实际上是有效的;使用小的二进制字符串。 事实上,在这一点上,atol无法处理那么长的数字字符串

我的建议是:使用字符数组而不是字符串,如果bin1[i]{bin1[i]=1;}或者{bin1[i]=0},则用数字值替换0和1个字符,这样您就可以执行所有您想要的数学操作了,毕竟您已经编写了一个工作和函数

完成数学运算后,您可以将字符数组转换回0和1的实际字符,并在屏幕上显示

编辑2015-11-07_17:30 我自己测试过atol:它只正确转换最长为10个字符的字符串。 任何超过第10个字符的内容都会使函数变得疯狂