2013-04-02 82 views
0

我有這樣一段代碼:istringstream無效的錯誤初學者

if(flag == 0) 
{ 
// converting string value to integer 

istringstream(temp) >> value ; 
value = (int) value ; // value is a 
} 

我不知道如果我使用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

除非你真正需要做的,否則,只考慮使用類似:

int value = std::stoi(temp); 

如果你必須使用stringstream,你通常想用它包裹在一個lexical_cast func重刑:

int value = lexical_cast<int>(temp); 

該代碼看起來是這樣的:

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

至於如何模仿stoi如果你沒有一個,我會使用strtol爲出發點:

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