2011-09-06 5 views
0

가능한 중복 : 음
How to convert a single char into an intC++에서 Int로 변환할까요?

, 나는 기본적인 프로그램을하고 있어요, 느릅 나무 같은 일부 입력 처리 : 그래서

2 + 2

을, I 2 + 2를 더해야합니다.

나는 somethi를했습니다. ng like :

string mys "2+2"; 
fir = mys[0]; 
sec = mys[2]; 

이제 "전나무"를 "초"에 추가하고 싶습니다. 따라서이를 Int로 변환해야합니다. "int (fir)"을 시도했지만 작동하지 않았습니다.

답변

5

문자열을 int로 변환하는 방법은 여러 가지가 있습니다.

용액 1 : 사용 레거시 C 기능

int main() 
{ 
    //char hello[5];  
    //hello = "12345"; --->This wont compile 

    char hello[] = "12345"; 

    Printf("My number is: %d", atoi(hello)); 

    return 0; 
} 

해결책 2 : 사용 lexical_cast (가장 적합한 간단한 &)

int x = boost::lexical_cast<int>("12345"); 

SOLU 기 3 : 그래서 먼저 좋아 시도한 작동하지 않았다 어떤 이유에 조금 backround에를 C++ Streams

std::string hello("123"); 
std::stringstream str(hello); 
int x; 
str >> x; 
if (!str) 
{  
    // The conversion failed.  
} 
+0

왜이 것이 다운 되었습니까? – MGZero

+1

@MGZero 누군가가 바보가되어 대답을 downvoting입니다. – Kiril

+0

최근 SO의 순서와 비슷합니다. –

2

사용. 귀하의 예제에서 fir은 문자열로 선언됩니다. int (fir)을 (int) fir과 동일하게하려고하면 문자열에서 정수로 C 스타일 캐스트를 시도했습니다. 근본적으로 당신은 쓰레기를 얻을 것이다. 왜냐하면 C++로 된 c-style 캐스팅은 사용 가능한 모든 캐스팅을 통과하여 작동하는 첫 번째 캐스팅을 수행 할 것이기 때문이다. 기껏해야 사용하는 문자 인코딩 (UTF-8, ascii 등 ...)에 의존하는 문자 2를 나타내는 메모리 값을 가져올 것입니다. 예를 들어, fir에 "2"가 포함 된 경우 정수 값으로 0x32를 얻을 수 있습니다 (ascii라고 가정). 실제로 C 스타일의 캐스트는 사용하지 말아야하며, 실제로 사용하는 것이 안전한 유일한 곳은 숫자 유형 간의 변환입니다.

예를 들어 주어진 문자열이 strtok와 같은 함수를 사용하여 문자열을 관련 문자 시퀀스 (토큰)로 분리해야합니다. 이 간단한 예제에서는 "2", "+"및 "2"가됩니다. 일단 문자열로 변환하면 atoi와 같은 함수를 간단하게 호출하여 정수로 변환 할 수 있습니다.

예 : 당신은뿐만 아니라 정수가 아닌 숫자를 처리 할 수 ​​있도록하려면

string str = "2"; 
int i = atoi(str.c_str()); //value of 2 

그러나이 약간 더 복잡합니다. 이 경우 가장 좋은 방법은 피연산자 (+ -/* 등)를 분리 한 다음 숫자 문자열에서 소수점을 찾습니다.하나를 찾으면 이중으로 취급하고 atoi 대신 atof 함수를 사용하고, 그렇지 않으면 atoi를 사용하십시오.