C++ 添加二进制数 - 分段错误
C++ Adding binary numbers - Segmentation fault
我正在做作业,我必须添加两个二进制数。我有一些代码,它真的不是最好的解决方案,但它有效,至少在 Visual Studio 控制台中,但是,当我上传源代码时.cpp可以判断它是否正常,它给了我错误: 分段故障/总线错误/超出内存限制/超出堆栈限制
在我添加了这部分代码以在结果之前删除"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;
}
谢谢你的帮助。
你在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
或其他东西。
可能还有更多的bug,没看得太难。
不能使用 stoi() 方法将字符串转换为整数,因为整数变量可以是最大2147483647。如果在字符串变量中输入更大的数字,变量将溢出。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?