#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

最佳答案

我看到的问题:

  • 您需要使用s.length()而不是sizeof(s)
  • 您需要使用从0开始的索引值,而不是1
  • 您需要使用i < ...而不是i <= ...

  • 以上所有内容都在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。这会导致不确定的行为。由于您尚未说明该程序应该执行的操作,因此我无法为此提供建议的修复程序。

    关于c++ - 以类型为std::out_of_range的未捕获异常终止:basic_string,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41456900/

    10-11 23:20