2012-04-13 13 views
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は何ですか?誰かが文字列からintへの変換の背後にあるアルゴリズムを私に説明することはできますか?

+0

そのプログラムはコンパイルされません。最初に修正してください。 – ildjarn

+0

48文字 '0'のASCIIコード値です – TJD

+1

それはよく書かれたコードではなく、 "謎" 48、そしてコメントの欠如がプレゼントであることに注意する必要があります。 (また、この変換やブーストのためのストリングストリームがあります) –

答えて

3

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

1

実際には文字列を整数に変換します。このルーチンでは、すべての文字が小数点以下の桁数(マイナス符号、スペース、コンマなど)であることが前提です。

これは1から始まり、文字列内を移動します。各桁については、ASCII値'0'を減算し、現在のプレース値を乗算します。

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の整数を返します!

関連する問題