嗯,我正在做一個基本的程序,處理至極像一些輸入:
2 + 2
所以,我需要添加2 + 2.
我做了某事ng像:
string mys "2+2";
fir = mys[0];
sec = mys[2];
但現在我想添加「fir」到「sec」,所以我需要將它們轉換爲Int。 我試過「int(fir)」,但沒有奏效。
嗯,我正在做一個基本的程序,處理至極像一些輸入:
2 + 2
所以,我需要添加2 + 2.
我做了某事ng像:
string mys "2+2";
fir = mys[0];
sec = mys[2];
但現在我想添加「fir」到「sec」,所以我需要將它們轉換爲Int。 我試過「int(fir)」,但沒有奏效。
有多種將字符串轉換爲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.
}
好吧,那麼首先爲什麼你嘗試沒有工作一個多小的底色。在你的例子中,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。
爲什麼這會降低投票率? – MGZero
@MGZero有人正在做一個混蛋,並且在回答問題。 – Kiril
最近似乎在這裏的時間順序。 –