String C++中字符串下标的范围

String C++中字符串下标的范围,string,range,out,subscript,String,Range,Out,Subscript,我试图将罗马数字转换成十进制数字,但每次输入罗马数字时都会遇到这个错误。我已经试过多次编辑代码,但到目前为止我还没有弄清楚到底发生了什么 这是我的密码: 标题: #include <string> using namespace std; class romanNumeralType { public: string setNumeral() const; string getNumeral(); int convert(string romanNumber); int g

我试图将罗马数字转换成十进制数字,但每次输入罗马数字时都会遇到这个错误。我已经试过多次编辑代码,但到目前为止我还没有弄清楚到底发生了什么

这是我的密码:

标题:

#include <string>
using namespace std;

class romanNumeralType
{
public: 
string setNumeral() const;

string getNumeral();

int convert(string romanNumber);

int getDecimal();

void printRoman() const;

void printDecimal() const;

private:

string romanNumber; 

int englishNumbers;

};
实施:

string romanNumeralType::setNumeral() const
{
string romanNumber;
cout << "Please enter the Roman Numeral you wish to use: ";

cin >> romanNumber;
cout << endl;   

return romanNumber;
}

string romanNumeralType::getNumeral()
{
return romanNumber;
}

int romanNumeralType::convert(string romanNumber)
{
englishNumbers = 0;

for (size_t i = 0; i < romanNumber.length(); i++ ) 
{
    switch (romanNumber[i]) 
    {
        case 'm':
        case 'M': 
            if (romanNumber[i] == 'M')
            {
            englishNumbers += 1000;
            }
            break;
        case 'd':
        case 'D': 
            if(romanNumber[i+1] == 'M')
                {
                    englishNumbers += 500;
                }
            else if(romanNumber[i-1] == 'M')
                {
                    englishNumbers -= 500;
                }
            break;
        case 'c':
        case 'C': 
            if(romanNumber[i+1] == 'M' || romanNumber[i+1] == 'D')
            {
                englishNumbers += 100;
            }
            else if(romanNumber[i-1] == 'M' || romanNumber[i-1] == 'D')
            {
                englishNumbers += 100;
            }
            break;
        case 'l':   
        case 'L': 
            if(romanNumber[i+1] == 'M' || romanNumber[i+1] == 'D' || romanNumber[i+1] == 'C')
            {
                englishNumbers -= 50;
            }
            else if(romanNumber[i-1] == 'M' || romanNumber[i-1] == 'D' || romanNumber[i-1] == 'C')
            {
                englishNumbers += 50;
            }
            break;
        case 'x':
        case 'X':
            if(romanNumber[i+1] == 'M' || romanNumber[i+1] == 'D' || romanNumber[i+1] == 'C' || romanNumber[i+1] == 'L')
            {
                englishNumbers -= 10;
            }
            else if(romanNumber[i-1] == 'M' || romanNumber[i-1] == 'D' || romanNumber[i-1] == 'C' || romanNumber[i-1] == 'L')
            {
                englishNumbers += 10;
            }
            break;
        case 'v':
        case 'V': 
            if(romanNumber[i+1] == 'M' || romanNumber[i+1] == 'D' || romanNumber[i+1] == 'C' || romanNumber[i+1] == 'L' || romanNumber[i+1] == 'X')
            {
                englishNumbers -= 5;
            }
            else if(romanNumber[i-1] == 'M' || romanNumber[i-1] == 'D' || romanNumber[i-1] == 'C' || romanNumber[i-1] == 'L' || romanNumber[i-1] == 'X')
            {
                englishNumbers += 5; 
            }
            break;
        case 'i':
        case 'I':
            if(romanNumber[i+1] == 'M' || romanNumber[i+1] == 'D' || romanNumber[i+1] == 'C' || romanNumber[i+1] == 'L' || romanNumber[i+1] == 'X' || romanNumber[i+1] == 'V')
            {
                englishNumbers -= 5;
            }
            else if(romanNumber[i-1] == 'M' || romanNumber[i-1] == 'D' || romanNumber[i-1] == 'C' || romanNumber[i-1] == 'L' || romanNumber[i-1] == 'X' || romanNumber[i-1] == 'V')
            {
                englishNumbers += 1;
            }   
            break;
        default: 
            return 0;
    }//end switch
}//end for
return englishNumbers;
}

int romanNumeralType::getDecimal()
{
return englishNumbers;
}

void romanNumeralType::printRoman() const
{
cout << "The Roman Numeral is: " << romanNumber;
}

void romanNumeralType::printDecimal() const
{
cout << "The Decimal is: " << englishNumbers;
}

任何帮助都将不胜感激

我认为这是因为您的一些代码在当前索引之前查看数组索引,例如I+1。当到达数组的末尾时,i+1将不是数组的有效元素,这将给您一个错误

我们有0,什么是输入,什么是结果?哪一行有错误?这很明显是因为我是如何从0变为大小1的;但是你在修改i+1索引,对于size-1,它变成了超出范围的大小。输入是romanNumber,我已经输入为MCXIV,结果应该是英文数字。我认为错误在for循环的开始。