我遇到的问题
定义一个名为MyInteger的类,它存储一个整数,并具有获取和设置整数值的函数。然后,重载[]运算符,使索引返回位置i的数字,其中i = 0是最低有效数字。如果不存在这样的数字,则应返回-1。
我理解第一部分,但我不明白如何实现第二部分,
然后,重载[]运算符,使索引返回位置i的数字,其中i = 0是最低有效位。如果不存在这样的数字,则应返回-1。
我的代码是这样的:
#include <iostream>
using namespace std;
class MyInteger{
private:
int integer;
public:
MyInteger(int bInteger = 0)
{
integer = bInteger;
}
int getInteger(){ return integer; }
void setInteger(int bInteger){ integer = bInteger; }
void operator[](int x) //???
{
}
};
int main()
{
cout << "Enter an integer " << endl;
//cin >>
}
答案 0 :(得分:0)
据我了解第二部分,您必须实现运算符以返回单个数字。 以某种方式给出
MyInteger x;
x.set(43210)
int a = x[0];
int b = x[1];
int c = x[5];
a应该等于0,b应该等于1,c应该等于-1。要获得数字,您可以使用模运算:
获取任何整数的第一个数字(索引0)&#34; i&#34;只返回%10。获得第二个数字(索引1)
int result = ((i - (i%10)) % 100) / 100
表示第二个指数
int result = ((i - (i%10) - (i%100)) % 1000) / 1000
这可以通过for循环更加明确地制定。
答案 1 :(得分:0)
对于十进制数,您的类应返回与位置(索引)对应的十进制数字,例如如果MyInteger m = 12347,则运算符m [0]将返回7,m [3]将返回2,m [6]将返回-1。
答案 2 :(得分:0)
关于问题的第一部分,我建议你:
int operator[](int x)
{
int ten;
for (ten = 10; x; x--)
ten *= 10;
int digit = (integer%ten) / (ten / 10);
return digit;
}
顺便说一句,为了简化测试,我建议您定义以下内容以允许在MyInteger
上使用cin:
istream& operator>> (istream& is, MyInteger& x)
{
int v;
is >> v;
x.setInteger(v);
return is;
}
对于第二部分,如果不存在此类数字,则应返回-1。,解决&#34;越界&#34;你可以拥有。例如,如果您有x = 21并且您执行x [3],则您使用上述程序返回0,而实际上没有第四位数字。
因此,您可以按如下方式更改operator[]
的最后一条指令:
return integer>=ten/10 ? digit:-1;
答案 3 :(得分:0)
我可以分享你的代码。 但我不确定解决问题是否最好。
#include<iostream>
#include<cmath>
using namespace std;
class MyInteger
{
public:
MyInteger(int integer);
MyInteger();
int operator[](int index);
void set(int integer);
int get();
private:
int integer;
};
int main()
{
MyInteger integer;
integer.set(123456);
cout<<"MyInteger: "<<integer.get()<<endl;
int i; /*position*/
cout<<"Enter the reference from zero to fine digit>>";
cin>>i;
if(integer[i]==-1)
cout<<"The integer doesn't exit.\n";
else
cout<<"The digit is: "<<integer[i];
system("pause");
return 0;
}
MyInteger::MyInteger(int integer)
{
this->integer=integer;
}
MyInteger::MyInteger()
{
this->integer=0;
}
int MyInteger::operator[](int index)
{
/*檢測是否在範圍內*/
int size=0;
int replacement=this->integer;
do
{
replacement=replacement/10;
size++;
}while(replacement!=0);
if(index>=size)
{
cout<<"It is not in range!\n";
return -1;
}
/*找出位置上的digit*/
int target=0;
int head=pow(10.0,index+1); /*去頭用*/
target=(this->integer)-((this->integer)-(this->integer)%head);
int foot=pow(10.0,index); /*去尾用*/
target=target/foot;
return target;
}
void MyInteger::set(int integer)
{
if((integer-(int)integer)==0)
this->integer=integer;
else
{
cout<<"It is not a intger!!";
exit(1);
}
}
int MyInteger::get()
{
return this->integer;
}
&#13;