我在做作业,我必须添加两个二进制数字。我有一些代码,它真的不是最好的解决方案,但它在视觉工作室控制台中至少可以工作,但是,当我将source.cpp上传到一个可以判断它是否可以的webapp时,它会给我一个错误: 分段错误/总线错误/超出内存限制/超出堆栈限制
在我添加了这部分代码后,在结果前删除了“0”,它开始出现了:
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'));
}
有什么不对,可能会导致此错误吗?
这是整个代码(不幸的是,名称是捷克语)
#include <iostream>
#include <string>
using namespace std;
bool IsOneOrZero(string n1, string n2)
{
bool is_zero;
for (int i = 0; i < n1.size(); i++)
{
if (n1[i] == '1' || n1[i] == '0')
{
is_zero = true;
}
else
{
is_zero = false;
return is_zero;
}
}
for (int i = 0; i < n2.size(); i++)
{
if (n2[i] == '1' || n2[i] == '0')
{
is_zero = true;
}
else
{
is_zero = false;
return is_zero;
}
}
return is_zero;
}
void ZmenaVelikosti(string& n1, string& n2)
{
if (n2.size() > n1.size())
{
while (n1.size() != n2.size())
{
n1 = '0' + n1;
}
}
else if (n1.size() > n2.size())
{
while (n1.size() != n2.size())
{
n2 = '0' + n2;
}
}
}
string SecteniCisel(string n1, string n2)
{
string vysledek;
int value = 0;
for (int i = n1.size(); i >= 0; i--)
{
if (n1[i] == '0' && n2[i] == '0' && value == 0)
{
vysledek = '0' + vysledek;
value = 0;
//soucet prvku je 0
}
else if (n1[i] == '0' && n2[i] == '0' && value == 1)
{
vysledek = '1' + vysledek;
value = 0;
//soucet prvku je 1
}
else if (n1[i] == '1' && n2[i] == '0' && value == 0)
{
vysledek = '1' + vysledek;
//soucet prvku je 1
}
else if (n1[i] == '0' && n2[i] == '1' && value == 0)
{
vysledek = '1' + vysledek;
//soucet prvku je 1
}
else if (n1[i] == '1' && n2[i] == '0' && value == 1)
{
vysledek = '0' + vysledek;
value = 1;
//soucet prvku je 0
//value = 1
}
else if (n1[i] == '0' && n2[i] == '1' && value == 1)
{
vysledek = '0' + vysledek;
value = 1;
//soucet prvku je 0
//value = 1
}
else if (n1[i] == '1' && n2[i] == '1' && value == 0)
{
vysledek = '0' + vysledek;
value = 1;
//soucet prvku je 0
//value = 1
}
else if (n1[i] == '1' && n2[i] == '1' && value == 1)
{
vysledek = '1' + vysledek;
value = 1;
//soucet prvku je 1
//value = 1
}
}
if (value == 1)
{
vysledek = '1' + vysledek;
}
int vysledek_int = stoi(vysledek);
if (vysledek_int == 0)
{
vysledek = "0";
}
else
{
int i = 0;
while (vysledek[i] == '0')
{
i++;
}
vysledek.erase(0, vysledek.find_first_not_of('0'));
}
return vysledek;
}
int main()
{
string n1;
string n2;
cout << "Zadejte dve binarni cisla:" << endl;
cin >> n1;
cin >> n2;
ZmenaVelikosti(n1, n2);
if (IsOneOrZero(n1, n2) == true)
{
cout << "Soucet: " << SecteniCisel(n1, n2) << endl;
}
else
{
cout << "Nespravny vstup." << endl;
return 0;
}
return 0;
}
感谢您的帮助。
答案 0 :(得分:0)
SecteniCisel
中的循环错误:
for (int i = n1.size(); i >= 0; i--)
{
if (n1[i] == '0' && n2[i] == '0' && value == 0)
当n1[i]
为i
时,您正在查看n1.size()
。你需要从头开始
n1.size() - 1
。在n1.size()
访问它无效。
除此之外,所有这些if ... else if ... else if
都是真的
可怕。使用表格或switch
或其他内容。
可能有更多的错误,看起来不太难。
答案 1 :(得分:0)
你不能使用stoi()方法将字符串转换为整数,因为整数变量可以是最大值2147483647.如果你在字符串变量中加入更大的数字,变量就会溢出。