我必须创建一个程序,将罗马数字转换为十进制数,我将垃圾值作为输出。 事实上,我已经仔细检查了我的逻辑,似乎是正确的。
我该如何纠正?
这是我的代码:
#include<iostream>
#include<cstring>
using namespace std;
class RomanType
{
char str[10];
int d;
public:
void accept()
{
cout<<"Enter Roman No. in capitals:"<<endl;
cin>>str;
convert(str);
}
void convert(char str1[10])
{
int j=0;
for(j=0;j<strlen(str1);j++)
{
if( str1[j]=='I')
{
if(str1[j+1]=='V' || str1[j+1]=='X')
{
d=d-1;
cout<<j<<endl;
}
else
{
d=d+1;
cout<<d<<endl;
}
}
if ( str1[j]=='V')
d=d+5;
if(str1[j]=='X')
{
if(str1[j+1]=='L' || str1[j+1]=='C')
d=d-10;
else
d=d+10;
}
if(str1[j]=='L')
d=d+50;
if( str1[j]=='C')
{
if(str1[j+1]=='D' || str1[j+1]=='M')
d=d-100;
else
d=d+100;
}
if(str1[j]=='D')
d=d+500;
if(str1[j]=='M')
d=d+1000;
}
}
void display()
{
cout<<"It's decimal equivalent is="<<d<<endl;
}
};
main()
{
RomanType obj;
obj.accept();
obj.display();
}
答案 0 :(得分:2)
几点:
I
,V
和X
开始(即首先是目标1到10,然后是11到20,然后是21到39,40到99,100到499等)< / LI>
I
,则不要假设它是在V
或X
之前或之后给出的。它可以自己给出(例如II
- 你还有其他部分假设的东西)。d
的值d
和其他变量的值。如果调试器不好或不可用,请在每个步骤/迭代上输出值。str
传递给函数convert
,因为它们属于同一个类,convert
可以/会读取相同的类内容。答案 1 :(得分:1)
您没有将d初始化为0
in convert put d = 0 at the start
答案 2 :(得分:0)
您没有将d
初始化为0.请在convert
函数的顶部添加:
void convert(char str1[10])
{
int j=0;
d = 0;
. . .
答案 3 :(得分:0)
好的家伙感谢您的帮助。它现在已经解决了。我做了一个大错,然后在convert()中再次初始化d,所以这使它成为一个局部变量。见评论:
#include<iostream>
#include<cstring>
using namespace std;
class RomanType
{
char str[10];
int d;
public:
void accept() // UNNECESSARILY NOT PASSING ANY STRING
{
cout<<"Enter Roman No. in capitals:"<<endl;
cin>>str;
convert();
}
void convert()
{
d=0;// PREVIOUSLY WRIITEN int d=0; so that was the mistake. Yay! it's solved :D
for(int j=0;j<10;j++)
{
if( str[j]=='I')
{
if(str[j+1]=='V' || str[j+1]=='X')
{
d=d-1;
// cout<<d<<endl;
}
else
{
d=d+1;
//cout<<d<<endl;
}
}
else if ( str[j]=='V')
d=d+5;
else if(str[j]=='X')
{
if(str[j+1]=='L' || str[j+1]=='C')
d=d-10;
else
d=d+10;
}
else if(str[j]=='L')
d=d+50;
else if( str[j]=='C')
{
if(str[j+1]=='D' || str[j+1]=='M')
d=d-100;
else
d=d+100;
}
else if(str[j]=='D')
d=d+500;
else if(str[j]=='M')
d=d+1000;
}
}
void display()
{
cout<<"It's decimal equivalent is="<<d<<endl;
}
};
main()
{
RomanType obj;
obj.accept();
obj.display();
}