0

演算子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は何ですか?stringからintへの変換の背後にあるアルゴリズムを誰かが私に説明できますか?

4

3 に答える 3

3

はい、これは文字列を整数に変換します。48は「0」のASCII値です。ASCII桁から48を引くと、その桁の値が得られます(例:「0」-48 = 0、「1」-48 = 1、..)。コードは、各桁について、k(1 ... 10 ^ {入力文字列で表される数値の対数}の範囲)を使用して、正しい10の累乗を計算します。

于 2012-04-13T16:49:22.183 に答える
1

実際、文字列を整数に変換します。このルーチンは、すべての文字が10進数であると想定しています(マイナス記号、スペース、コンマなどはそれを台無しにします)。

それは1の場所から始まり、文字列を移動します。桁ごとに、のASCII値を減算し'0'、現在の場所の値を乗算します。

于 2012-04-13T16:48:06.353 に答える
0

これは確かに文字列を整数に変換します。アスキーテーブルを見ると、数値は値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の整数が返されます。

お役に立てれば!

于 2012-04-13T16:52:41.843 に答える