为什么我在此代码中收到 SIGABRT 错误
Why am i getting a SIGABRT error in this code
我在CodeChef中编写了这段代码,但它不断给我运行时错误,称为(SIGABRT(。我一直在尝试解决这个问题,但没有结果。我已经将记忆力减少到极致。我需要帮助。
有N名学生站成一排,从左到右编号为1到N。你会得到一个长度为 N 的字符串 S,其中对于每个有效的 i,如果第 i 个学生是女孩,则 S 的第 i 个字符是"x",如果这个学生是男孩,则 S 的第 i 个字符是"y"。排站在一起的学生是朋友。
要求学生组成双人舞比赛。每对必须由一个男孩和一个女孩组成。两个学生只有在是朋友的情况下才能组成一对。每个学生最多只能是一对的一部分。可以形成的最大对数是多少?
示例输入 3 XY xyxxy YY
示例输出 1 2 0
解释 示例案例 1:只有一个可能的对:(第一个学生,第二个学生(。
示例案例 2:形成两对的方法之一是:(第一个学生,第二个学生(和(第四个学生,第五个学生(。
形成两对的另一种方法是:(第二个学生,第三个学生(和(第四个学生,第五个学生(。
#include <iostream>
#include <string>
#define rp(l,p) for(int l = 0; l < p; l+=2)
#define s string
#define ll long long
using namespace std;
int main() {
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
// your code goes here
int t = 0;
cin >> t;
while(t--){
s n = "";
ll max = 0;
cin >> n;
if(n.size()%2 == 0){
rp(l, n.size()-1){
if(n.substr(0+l, 2) == "xy" || n.substr(0+l, 2) == "yx"){
max+=1;
}
}
}
else if(n.size()%2 == 1){
s x = n.substr(n.size()-1, 1);
n.resize(n.size()-1);
for(int m = 0; m <= (n.size()-1); m+=2){
if(n.substr(0+m, 2) == "xy" || n.substr(0+m, 2) == "yx"){
max+=1;
}
}
n.append(x);
if(n.substr(n.size()-3,2) == "xy" || n.substr(n.size()-3,2) == "yx"){
}
else if(n.substr(n.size()-2,2) == "xy" || n.substr(n.size()-2,2)=="yx"){
max+=1;
}
}
cout << max << endl;
}
return 0;
}
我完全与@Sam瓦尔沙夫奇克在一起
但是,我尝试使用以下输入编写代码:
-
尝试
$ ./测试
输入 2
输入 HA
输出 0
输入LO
输出 0 => 无崩溃
-
尝试
$ ./测试
输入 2
输入 HA
输出 0
输入LO
输出 0
=> 无崩溃
-
try
$ ./测试
输入 2
输入 A
在抛出"std::out_of_range"实例后终止调用 what((: basic_string::substr: __pos (即 2(> this->size(( (即 0( 已中止(核心已转储(
因此,让我们分析一下您的代码。当字符串 n 的大小为 1 时,它似乎崩溃了。
在 substr调用中,有很多硬编码的整数,如果字符串具有所需的长度,则没有任何验证(又名 substr(...,2((
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 为什么我在此代码中收到 SIGABRT 错误
- C++中链表的错误"Abort signal from abort(3) (sigabrt) "
- 当我的代码工作正常时,为什么在SPOJ中遇到运行时(Sigabrt)错误
- CPP中的Sigabrt错误
- 在数组中移动元素 SIGABRT 错误
- 由于 getline(cin,s) 导致的 SIGABRT 错误
- 在Hepsort程序中获取Sigabrt错误
- SIGABRT 运行时何时出现错误以及如何在这种情况下进行调试
- 链接列表的SIGABRT错误
- 矢量和双克初始化或push_back会导致 SIGABRT 错误
- C++中的SIGABRT错误
- 用GDB中更有意义的错误描述替换SIGABRT
- CudaMalloc抛出sigabrt错误