C++ C++;添加二进制数-分段错误
我正在做一个家庭作业,我必须把两个二进制数相加。我有一些代码,这确实不是最好的解决方案,但至少在visual studio控制台中是有效的,但是,当我将source.cpp上传到一个webapp时,它会告诉我它是否正确,它会给我错误: 分段故障/总线错误/超出内存限制/超出堆栈限制 在我在结果之前添加删除“0”的这部分代码后,它开始出现:C++ C++;添加二进制数-分段错误,c++,binary,C++,Binary,我正在做一个家庭作业,我必须把两个二进制数相加。我有一些代码,这确实不是最好的解决方案,但至少在visual studio控制台中是有效的,但是,当我将source.cpp上传到一个webapp时,它会告诉我它是否正确,它会给我错误: 分段故障/总线错误/超出内存限制/超出堆栈限制 在我在结果之前添加删除“0”的这部分代码后,它开始出现: int result_int = stoi(result); if (result_int == 0) // needed for case when res
int result_int = stoi(result);
if (result_int == 0) // needed for case when result will be only 0, like "00000"
{
result = '0';
}
else
{
int i = 0;
while (result[i] == '0')
{
i++;
}
result.erase(0, result.find_first_not_of('0'));
}
是否有任何可能导致此错误的错误
这是全部代码(不幸的是名称是捷克语)
#包括
#包括
使用名称空间std;
布尔IsOneOrZero(字符串n1、字符串n2)
{
布尔为零;
对于(int i=0;in1.size())
{
而(n1.size()!=n2.size())
{
n1='0'+n1;
}
}
如果(n1.size()>n2.size())
{
而(n1.size()!=n2.size())
{
n2='0'+n2;
}
}
}
字符串SEL(字符串n1、字符串n2)
{
字符串vysledek;
int值=0;
对于(int i=n1.size();i>=0;i--)
{
如果(n1[i]=“0”&&n2[i]=“0”&&value==0)
{
vysledek='0'+vysledek;
数值=0;
//苏塞特prvku je 0
}
else如果(n1[i]=='0'和n2[i]=='0'和&value==1)
{
vysledek='1'+vysledek;
数值=0;
//苏塞特prvku je 1
}
else如果(n1[i]=='1'和n2[i]=='0'和&value==0)
{
vysledek='1'+vysledek;
//苏塞特prvku je 1
}
如果(n1[i]='0'&&n2[i]='1'&&value==0)
{
vysledek='1'+vysledek;
//苏塞特prvku je 1
}
else如果(n1[i]=='1'和n2[i]=='0'和&value==1)
{
vysledek='0'+vysledek;
数值=1;
//苏塞特prvku je 0
//值=1
}
else如果(n1[i]='0'和n2[i]='1'和&value==1)
{
vysledek='0'+vysledek;
数值=1;
//苏塞特prvku je 0
//值=1
}
如果(n1[i]='1'&&n2[i]='1'&&value==0),则为else
{
vysledek='0'+vysledek;
数值=1;
//苏塞特prvku je 0
//值=1
}
else如果(n1[i]=='1'和n2[i]=='1'和&value==1)
{
vysledek='1'+vysledek;
数值=1;
//苏塞特prvku je 1
//值=1
}
}
如果(值==1)
{
vysledek='1'+vysledek;
}
int vysledek_int=stoi(vysledek);
如果(vysledek_int==0)
{
vysledek=“0”;
}
其他的
{
int i=0;
而(vysledek[i]=“0”)
{
i++;
}
擦除(0,vysledek.find_first_not_of('0'));
}
返回vysledek;
}
int main()
{
字符串n1;
n2串;
cout-n1;
cin>>n2;
ZmenaVelikosti(n1,n2);
如果(IsOneOrZero(n1,n2)=真)
{
cout您在SecteniCisel
中的循环有缺陷:
for (int i = n1.size(); i >= 0; i--)
{
if (n1[i] == '0' && n2[i] == '0' && value == 0)
当i
为n1.size()
时,您正在查看n1[i]
。您需要从
n1.size()-1
。在n1.size()
处访问它无效
除此之外,所有这些if…else if…else if
糟透了。用一张桌子或一个开关或别的什么东西
可能还有更多的错误,请不要看得太仔细。您不能使用stoi()方法将字符串转换为整数,因为整数变量的最大值可以是2147483647。如果在字符串变量中输入较大的数字,变量将溢出。始终发布可编译代码。在一个位置(结果='0';
),result
似乎是一个char
。在另一个(result.erase(…
)中,您将其视为一个容器(例如string
)。不幸的是,您没有包含声明。我在此处将“result”声明为stringPost代码。我发布了代码。
for (int i = n1.size(); i >= 0; i--)
{
if (n1[i] == '0' && n2[i] == '0' && value == 0)