Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我在这段代码中会出现SIGABRT错误_C++_Algorithm_C++11_Sigabrt - Fatal编程技术网

C++ 为什么我在这段代码中会出现SIGABRT错误

C++ 为什么我在这段代码中会出现SIGABRT错误,c++,algorithm,c++11,sigabrt,C++,Algorithm,C++11,Sigabrt,我已经用CodeChef编写了这段代码,但它经常给我一个名为(SIGABRT)的运行时错误。我一直在努力解决这个问题,但没有结果。我已经把记忆力减到了极限。我需要帮助 有N名学生站成一排,从左到右编号为1到N。给您一个长度为N的字符串S,其中对于每个有效i,如果第i个学生是女孩,则S的第i个字符为“x”,如果该学生是男孩,则S的第i个字符为“y”。一排挨着站的学生是朋友 学生们被要求结成一对参加舞蹈比赛。每一对必须由一男一女组成。只有两个学生是朋友,他们才能结成一对。每个学生最多只能是一对的一部

我已经用CodeChef编写了这段代码,但它经常给我一个名为(SIGABRT)的运行时错误。我一直在努力解决这个问题,但没有结果。我已经把记忆力减到了极限。我需要帮助

有N名学生站成一排,从左到右编号为1到N。给您一个长度为N的字符串S,其中对于每个有效i,如果第i个学生是女孩,则S的第i个字符为“x”,如果该学生是男孩,则S的第i个字符为“y”。一排挨着站的学生是朋友

学生们被要求结成一对参加舞蹈比赛。每一对必须由一男一女组成。只有两个学生是朋友,他们才能结成一对。每个学生最多只能是一对的一部分。可以形成的最大对数是多少

示例输入 3. xy xyxxy yy

示例输出 1. 2. 0

解释 示例案例1:只有一对可能:(第一个学生,第二个学生)

例2:形成两对的方法之一是:(第一个学生,第二个学生)和(第四个学生,第五个学生)

形成两对的另一种方式是:(第二个学生,第三个学生)和(第四个学生,第五个学生)

#包括
#包括
#为(int l=0;l>t;
而(t--){
s n=“”;
ll max=0;
cin>>n;
如果(n.size()%2==0){
rp(l,n.尺寸()-1){
如果(n.substr(0+l,2)=“xy”| n.substr(0+l,2)=“yx”){
max+=1;
}
}
}
else if(n.size()%2==1){
sx=n.substr(n.size()-1,1);
n、 调整大小(n.size()-1);

对于(int m=0;mI),我完全赞同@Sam Varshavchik

但是,我使用以下输入尝试了Your's代码:

  • 试一试

    美元/测试

    输入2

    输入ha

    输出0

    输入lo

    输出0 =>无碰撞

  • 试一试

    美元/测试

    输入2

    输入ha

    输出0

    输入lo

    输出0

  • =>无碰撞

  • 试一试

    美元/测试

    输入2

    输入a

    在抛出'std::out_of_range'的实例后调用terminate what():basic\u string::substr:\u pos(2)>this->size()(0) 中止(堆芯转储)

  • 让我们分析一下你的代码。当字符串n的大小为1时,它似乎崩溃了


    在your's substr调用中,如果字符串具有所需的长度(又称substr(…,2)),则存在大量未经任何验证的硬编码整数

    一些导致问题的示例输入可能会有帮助,因为所有这些宏和非描述性的单字符变量,显示的代码很难理解。如果我向其他人寻求帮助以找出代码的问题,我会尽量使其易于理解并尽可能具有描述性。我的代码越容易理解而且,对于其他人来说,有人越有可能看到问题。我无法在不知道输入的情况下重现您的错误。下面是,您可以使用输入触发sigabrt并调试它。只需单击“开始”构建代码,并在终端中运行。我用建议的输入运行了代码,结果成功了。你能提供一些不起作用的输入吗?
    #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;
    }