首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c++中stol()函数中的错误处理

c++中stol()函数中的错误处理
EN

Stack Overflow用户
提问于 2016-12-17 13:04:31
回答 2查看 453关注 0票数 1

这是我使用的代码:

代码语言:javascript
复制
int cap(long n){
    long sq = n*n;
    string num = to_string(sq),s1,s2;
    cout << num;
    for(int i=1;i<=num.length();i++){
        s1 = num.substr(0,i);
        s2 = num.substr(i,num.length()-i);
        string::size_type sz=0;  
        long n1 = stol (s1,&sz,0);
        long n2 = stol (s2,&sz,0);
        if(n1+n2==n){
            return 1;
        }
    }
    return 0;
}

This is the error i get。对于这种类型的错误有什么提示吗?

EN

回答 2

Stack Overflow用户

发布于 2016-12-17 13:24:47

循环条件错误,请设置

代码语言:javascript
复制
for(int i=1;i<num.length();i++){

而且程序不会崩溃。尽管如此,我不能断言结果是否符合预期。

票数 0
EN

Stack Overflow用户

发布于 2016-12-17 13:30:08

当为i=num.length()时,s2为空,因为

代码语言:javascript
复制
s2 = num.substr(i,num.length()-i); 

与以下内容相同

代码语言:javascript
复制
s2 = num.substr(i, 0);  //for i=num.length()
                   ^~~~~length of substring is zero

然后,此空字符串将作为s2传递给stol,从而导致错误"terminate called throwing an instance of 'std::invalid_argument'“

代码语言:javascript
复制
long n2 = stol (s2, &sz, 0);
                 ^~~~~Empty string.

Demo

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

https://stackoverflow.com/questions/41195538

复制
相关文章

相似问题

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