这个计划背后的逻辑是什么?

时间:2012-04-13 16:35:36

标签: c++ type-conversion inner-classes data-conversion

operator int()函数将字符串转换为int

class mystring
{ 
  private:
    chat str[20];

  public:
   operator int()             // i'm assuming this converts a string to an int
   {
     int i=0,l,ss=0,k=1;

     l = strlen(str)-1;
     while(l>=0)
     {
       ss=ss+(str[l]-48)*k;
       l--;
       k*=10;
     }
     return(ss);
   } 
}

int main()
{
  mystring s2("123");
  int i=int(s2);
  cout << endl << "i= "<<i;
}

那么operator int()背后的逻辑是什么?那里的48是什么?有人可以向我解释从字符串到int的转换背后的算法。

3 个答案:

答案 0 :(得分:3)

是的,这会将字符串转换为整数。 48是'0'的ASCII值。如果从ASCII数字中减去48,您将得到数字的值(例如:'0' - 48 = 0,'1' - 48 = 1,..)。对于每个数字,您的代码使用k计算正确的幂10(范围介于1 ... 10 ^ {输入字符串表示的数字的对数})。

答案 1 :(得分:1)

确实将字符串转换为整数。该例程假设所有字符都是十进制数字(如减号,空格或逗号之类的东西会搞乱它)。

它从那些地方开始并在字符串中移动。对于每个数字,它会减去'0'的ASCII值,并乘以当前的位置值。

答案 2 :(得分:0)

这确实将字符串转换为整数。如果你看一个ascii表,数字从值48开始。使用这个逻辑(并说出字符串“123”)while循环将执行:

l=2

ss=0+(51-48)*1

所以在这种情况下ss = 3

我们得到的下一个循环

l=1

ss=3+(50-48)*10 

所以ss = 23

下一个循环

l=0
ss=23+(49-48)*100

所以ss = 123

循环中断,我们返回一个值为123的整数。

希望这有帮助!