2012-04-13 6 views
0

운영자 INT() 함수는 그래서 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; 
} 

에 문자열을 변환? 거기에 48이 뭐야? 누군가 문자열에서 int 로의 변환 알고리즘을 나에게 설명 할 수 있습니까?

+0

해당 프로그램이 컴파일되지 않습니다. 먼저 수정하십시오. – ildjarn

+0

48 문자 '0'에 대한 아스키 코드 값입니다 – TJD

+1

잘 작성된 코드가 아니며 "수수께끼"48와 주석 부족은 ​​공짜입니다. (또한이 변환이나 부스트를 위해 stringstream을 사용합니다.) –

답변

3

예 이것은 문자열을 정수로 변환합니다. 48은 '0'의 ASCII 값입니다. ASCII 숫자에서 48을 빼면 숫자 값을 얻습니다 (예 : '0'- 48 = 0, '1'- 48 = 1, ..). 각 자릿수의 코드는 k (1 ... 10^{입력 된 문자열로 표시된 수의 로그} 사이의 범위)을 사용하여 올바른 10의 거듭 제곱을 계산합니다.

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

희망의 정수를 반환!

관련 문제