2016-12-17 159 views
1

這是代碼我使用:錯誤STOL處理()函數++

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。任何暗示這種類型的錯誤?

+1

而不是把快照,建議複製 - 粘貼錯誤消息文本。 –

回答

0

循環條件是不對的,你應該設置

for(int i=1;i<num.length();i++){ 

,程序不會崩潰。不過,我不能聲稱,如果結果是一個理想的。

0

i=num.length()s2是空的,因爲

s2 = num.substr(i,num.length()-i); 

其是相同

s2 = num.substr(i, 0); //for i=num.length() 
        ^~~~~length of substring is zero 

然後,該空字符串傳遞給stols2,從而導致錯誤「在拋出'std :: invalid_argument'

long n2 = stol (s2, &sz, 0); 
       ^~~~~Empty string. 

Demo