string中的length_error究竟是什么以及如何删除它

时间:2015-06-21 19:07:29

标签: c++ algorithm coding-style

我制作了以下代码,当我执行它时,我收到此错误:

  

在抛出'std :: length_error'

的实例后终止调用      

what():basic_string :: _ S_create

     

0Aborted(core dumped)

    #include<stdio.h>
    #include<string>
    #include<vector>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    bool comp(char c1, char c2)
    {
          return c1 < c2;
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            string str;
            getline(cin,str);
            sort(str.begin(), str.end(), comp);
            int k;
            long long int sum40=0,sum41=0;
            scanf("%d",&k);
            cout<<str.length();
            for(unsigned int i=0;i<str.length();++i)
            {
                if(str[i]=='(')
                    sum40++;
                else
                    sum41++;
            }
            if(sum40!=sum41 && k==1)
                cout<<str;
            else
            if(sum40!=sum41 && k!=1)
                printf("-1");
            else
                {
                    while(k>0 || (sum40==sum41))
                    {
                        str.erase(str.begin());
                         k--;
                    }
                    cout<<str;
                }
        }
        return 0;
    }

我想知道什么是std :: length_error错误以及如何删除它。

我知道这是常见的问题。我看到了很多文章,但这些文章没有解决我的问题。

任何帮助将不胜感激

此致

2 个答案:

答案 0 :(得分:0)

这意味着您尝试创建的字符串大于std :: string :: max_size()。请参阅以下链接中的备注部分。

https://msdn.microsoft.com/en-us/library/as4axahk(VS.80).aspx

答案 1 :(得分:0)

您可以使用string :: reserve函数更改字符串容量:http://www.cplusplus.com/reference/string/string/reserve/