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循环的开始。