2013-04-02 3 views
0

나는이 코드 조각이있다. 변수 "value"를 정수로 변환하고 싶습니다.istringstream 잘못된 오류 초보자

Compiler error : Invalid use of istringstream. 

어떻게 수정해야합니까?

첫 번째 답변을 사용하여 수정을 시도한 후.

stoi was not declared in this scope 

우리가 과거의 일을 할 수있는 방법이 있나요 : 그것은 나에게 다음과 같은 오류를 보여주는 것. 현재 사용중인 코드는 다음과 같습니다.

int i = 0 ; 
while(temp[i] != '\0') 
{ 
    if(temp[i] == '.') 
    { 
     flag = 1; 
     double value = stod(temp); 
    } 
    i++ ; 
} 
if(flag == 0) 
{ 
// converting string value to integer 
int value = stoi(temp) ; 
} 

답변

3

당신이 정말로 단지 같은 것을 사용하는 것이 좋습니다 달리 할 필요가없는 한 :

를 당신이 stringstream를 사용해야하는 경우
int value = std::stoi(temp); 

, 일반적으로 그것은 lexical_cast FUNC에 싸여 사용하려면 기 :

int value = lexical_cast<int>(temp); 

그의 코드가 보이는 뭔가 같은 : 당신이없는 경우 stoi을 모방하는 방법을, 나는 출발점으로 strtol을 사용하십시오에 관해서는

template <class T, class U> 
T lexical_cast(U const &input) { 
    std::istringstream buffer(input); 
    T result; 
    buffer >> result; 
    return result; 
} 

:

int stoi(const string &s, size_t *end = NULL, int base = 10) { 
    return static_cast<int>(strtol(s.c_str(), end, base); 
} 

실제로는 stoi의 요구 사항을 실제로 충족시키지 않는 빠르고 모방적인 모조품입니다. 예를 들어, 입력을 전혀 변환 할 수없는 경우 (예 : 10 진수 문자 전달) 예외가 발생합니다.

약 두 번 사용하면 stod을 비슷한 방법으로 구현할 수 있지만 대신 strtod을 사용할 수 있습니다.

+0

'std :: stoi'입니다. (아마도'std :: to_string'를 생각하고 있습니다) :) – chris

+0

@chris : 꽤 맞습니다. –

+0

@JerryCoffin - 재 편집 좀 해주실 수 있습니까? – thestralFeather7

0

우선 istringstream은 연산자가 아닙니다. 문자열에서 작동하는 입력 스트림 클래스입니다.

당신은 다음과 같이 할 수 있습니다

istringstream temp(value); 
    temp>> value; 
    cout << "value = " << value; 

현재 istringstream 사용의 간단한 예를 찾을 수 있습니다 http://www.cplusplus.com/reference/sstream/istringstream/istringstream/