“来自 abort(3) (SIGABRT) 的中止信号”。为什么只针对某些情况?
" Abort signal from abort(3) (SIGABRT)" . Why only for some cases?
我正在尝试从数组元素中形成最大数。下面给出的我的实现在某些情况下工作正常,而在其他一些情况下它给出错误
“来自 abort(3) (SIGABRT) 的中止信号”。为什么?帮帮我!
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
cin>>t;
while((t--)>0){
int n;
cin>>n;
int a[n];
string s="";
for(int i=0;i<n;i++){
cin>>a[i];
if(i==0){s+=to_string(a[i]); continue;}
string s1 = s+to_string(a[i]); //sX
string s2 = to_string(a[i])+s; //Xs
if(stoi(s1)>=stoi(s2))s=s1;
else s = s2;
}
cout<<s<<endl;
}
return 0;
}
对于以下情况,我的代码给出了错误
4 //size of array
54 546 548 60 //elements of array
这是由于 stoi
功能。这不适用于非常大的数字。
对于 string
到 int
的转换,请尝试以下方法。
手动将 string
转换为 int
的算法:
int x = 0; // may take long long
for(int i = 0; i < s.length(); i++)
x = x * 10 + s[i] - '0';
变量x
将存储讨论中字符串的整数值。
这是由于 INT_MAX 和 INT_MIN 值,即 2^31-1 和 -2^31 不能存储在整数类型数据中;
还
int z=stoi(string x) 将 returns 字符串转换为 int
要仅通过添加数组的第一个和最后一个元素(按字符串方式)来获得最大数,请根据您的程序尝试以下操作:
s = to_string(a[0]); #to get the first element
s1 = s1 + to_string(a[i]); #to get the ith element
s2 = to_string(a[i]) + s2;
这样您就可以使用数组的所有元素,而不是仅使用第一个和最后一个元素。
不使用 'stoi' 函数,而是使用以下代码将字符串转换为整数:
int num = 0;
for(int i = 0; i < s.length(); i++){
num = num * 10 + s[i] - '0';
}
如果程序本身检测到错误,则使用调用 abort() 生成此信号。标准库也使用此信号来报告内部错误。 c++ 中的 assert() 函数也使用 abort() 来生成此信号。
无限循环或弹出操作未完成时出现此错误,我之前也遇到过同样的错误,但之后可以设法解决
我正在尝试从数组元素中形成最大数。下面给出的我的实现在某些情况下工作正常,而在其他一些情况下它给出错误 “来自 abort(3) (SIGABRT) 的中止信号”。为什么?帮帮我!
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
cin>>t;
while((t--)>0){
int n;
cin>>n;
int a[n];
string s="";
for(int i=0;i<n;i++){
cin>>a[i];
if(i==0){s+=to_string(a[i]); continue;}
string s1 = s+to_string(a[i]); //sX
string s2 = to_string(a[i])+s; //Xs
if(stoi(s1)>=stoi(s2))s=s1;
else s = s2;
}
cout<<s<<endl;
}
return 0;
}
对于以下情况,我的代码给出了错误
4 //size of array 54 546 548 60 //elements of array
这是由于 stoi
功能。这不适用于非常大的数字。
对于 string
到 int
的转换,请尝试以下方法。
手动将 string
转换为 int
的算法:
int x = 0; // may take long long
for(int i = 0; i < s.length(); i++)
x = x * 10 + s[i] - '0';
变量x
将存储讨论中字符串的整数值。
这是由于 INT_MAX 和 INT_MIN 值,即 2^31-1 和 -2^31 不能存储在整数类型数据中; 还 int z=stoi(string x) 将 returns 字符串转换为 int
要仅通过添加数组的第一个和最后一个元素(按字符串方式)来获得最大数,请根据您的程序尝试以下操作:
s = to_string(a[0]); #to get the first element
s1 = s1 + to_string(a[i]); #to get the ith element
s2 = to_string(a[i]) + s2;
这样您就可以使用数组的所有元素,而不是仅使用第一个和最后一个元素。
不使用 'stoi' 函数,而是使用以下代码将字符串转换为整数:
int num = 0;
for(int i = 0; i < s.length(); i++){
num = num * 10 + s[i] - '0';
}
如果程序本身检测到错误,则使用调用 abort() 生成此信号。标准库也使用此信号来报告内部错误。 c++ 中的 assert() 函数也使用 abort() 来生成此信号。
无限循环或弹出操作未完成时出现此错误,我之前也遇到过同样的错误,但之后可以设法解决