以std :: out_of_range类型的未捕获异常终止:basic_string

时间:2017-01-04 05:39:04

标签: c++

#include <iostream>
#include <string>
using namespace std;
int main() {
   string s;
    cin>>s;
    int i;
    char c;
    for(i=1;i<=sizeof(s);i++){
        if((s.at(i)>='a'&&s.at(i)<='z')||(s.at(i)>='A'&&s.at(i)    <='Z')){
            c=c+4;
            if((s.at(i)>'Z'&&s.at(i)<'\136')||(s.at(i)>'z')){
                c=c-26;
            }
        }
    }
    cout<<c;
    return 0;
}

//以std :: out_of_range类型的未捕获异常终止:basic_string

1 个答案:

答案 0 :(得分:2)

我看到的问题:

  1. 您需要使用s.length()代替sizeof(s)
  2. 您需要使用从0开始的索引值,而不是1
  3. 您需要使用i < ...代替i <= ...
  4. 以上所有内容均在for声明中。使用:

    for(i=0; i < s.length(); i++){
    

    如果您能够使用C ++ 11编译器,则可以将其简化为:

    for( auto ch : s ){
      // Use ch instead of s.at(i) in the loop.
    }
    

    然后,你正在使用

    c = c + 4;
    

    c = c - 26;
    

    即使您尚未初始化c。这会导致未定义的行为。我无法建议修复,因为你还没有解释该程序应该做什么。