首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中来自abort(3) (SIGABRT)的Abort信号

C++中来自abort(3) (SIGABRT)的Abort信号
EN

Stack Overflow用户
提问于 2020-06-27 20:21:54
回答 2查看 1.1K关注 0票数 0
代码语言:javascript
复制
#include <iostream>
using namespace std;

int main()
{
    //code
    int test;
    cin >> test;
    while(test--)
    {
        int count = 0;
        string input;
        cin >> input;
        for (int j = 0; j < input.length() - 2; j++)
        {
           if (input.substr(j, 3) == "gfg")
           {
                count +=1;
           }
        }
        if (count > 0)
        {
            cout << count << endl;
        }
        else
        {
            cout << -1 << endl;
        }
        
    }
    return 0;
}

这段代码显示了abort(3) (SIGABRT)中的中止信号,同时在Geek for Geek中提交,而在本地计算机上运行良好,甚至在各种在线编译器上也能完美工作。找不到问题所在。有人能帮帮忙吗?

EN

回答 2

Stack Overflow用户

发布于 2020-06-27 20:40:57

想想当input少于两个字符时会发生什么。

input.length()是一个无符号量,因此input.length() - 2会绕到一个天文数字。

j是一个天文数字:it throws the exception std::out_of_range时,input.substr(j, 3)就不好用了;因为您没有捕捉到这个异常,所以您的程序将终止。

这些竞赛测试您是否涵盖了所有可能的输入域,特别是边缘情况。在编写算法时,一定要考虑到它们。

票数 4
EN

Stack Overflow用户

发布于 2020-06-27 20:26:05

我认为.substr需要string lib。出于某些原因,您在本地不需要它。

尝试添加

代码语言:javascript
复制
#include <string>

编辑:我尝试了一些变体

代码语言:javascript
复制
if(input.length()<2)
{
cout<<-1<<"\n" ;
break;
}

之前的for循环应该会有所帮助(input.length()不会在减法超过它的值时溢出。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62609948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档