2011-09-06 100 views
0

可能重複:
How to convert a single char into an intChar到Int的C++?

嗯,我正在做一個基本的程序,處理至極像一些輸入:

2 + 2

所以,我需要添加2 + 2.

我做了某事ng像:

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

但現在我想添加「fir」到「sec」,所以我需要將它們轉換爲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:使用C++ Streams

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

爲什麼這會降低投票率? – MGZero

+1

@MGZero有人正在做一個混蛋,並且在回答問題。 – Kiril

+0

最近似乎在這裏的時間順序。 –

2

好吧,那麼首先爲什麼你嘗試沒有工作一個多小的底色。在你的例子中,fir被聲明爲一個字符串。當你試圖做int(fir),它與(int)fir相同時,你試圖從一個字符串到一個整數的C風格轉換。基本上你會得到垃圾,因爲C++中的C風格轉換將通過所有可用的轉換運行,並採取第一個可行的轉換。充其量你將獲得代表字符2的內存值,這取決於你使用的字符編碼(UTF-8,ascii等等)。例如,如果fir包含「2」,那麼您可能會得到0x32作爲整數值(假設爲ascii)。你真的不應該使用C風格的轉換,並且使用它們的唯一地方是數字類型之間的轉換。

如果您的示例中給出了一個字符串,首先應該使用類似strtok的函數將字符串分隔爲相關的字符序列(標記)。在這個簡單的例子中,將是「2」,「+」和「2」。一旦你完成了,你可以簡單地調用一個函數,比如atoi上你想要轉換爲整數的字符串。

例子:

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

但是,如果你想成爲能夠處理非整數,以及這將讓稍微複雜一些。在這種情況下,最好的辦法是在操作數(+ -/*等)上分開,然後在數字串上查找小數點。如果你找到一個,你可以把它當作一個double,並使用atof函數而不是atoi,如果你不這樣做,只需要用atoi。