2010-09-04 181 views
1

你好我有一個問題,我試圖將字符串「12314234」轉換爲int ,所以我會得到字符串中的第一個數字。 從上面顯示的字符串的示例中,我想在int中獲得'1'。 我嘗試過: string line = "12314234"; int command = line.at(0); 但它把內部命令的ascii值爲1而不是數字1. 在此先感謝。將字符串轉換爲int

回答

3

爲數字字符(「0‘–’9‘)轉換成其相應的值,只是由該結果的。減去’0」的ASCII碼。

int command = line.at(0) - '0'; 
+0

C/C++標準不保證ASCII。它們確保所有的數字字符代碼都是相鄰的,並且按照順序排列,所以'5' - '0'將導致5。 – 2010-09-04 15:41:57

+0

也不是真的C++。看到我的答案。 – 2010-09-05 12:08:41

4
int command = line.at(0) - '0'; 

的數字字符的數值需要是彼此相鄰。所以這個工作無處不在,始終如一不管你的編譯器使用什麼字符集。

2

從stdlib(#include <cstdlib>)轉換ascii爲整數值的標準函數是strtol(字符串到長整數)。有關信息,請參見http://en.wikipedia.org/wiki/Strtol,然後關閉該頁面,標題爲正確使用strtol並移植。使用strtol你可以轉換一個數字字符,或一個數字字符序列,它們可以是多個基地址(十進制,十六進制等)。

+1

是的,除了C,不是C++。 – alternative 2010-09-04 14:22:49

+2

@mathepiC#include 然後使用std :: strtol()。 – Timothy 2010-09-04 14:33:00

+0

是的,但你必須將'string'轉換爲'char *' – alternative 2010-09-04 16:23:48

1

我試圖爲一個字符串,如「12314234」爲int

升壓轉換有這樣一個圖書館:

int i = boost::lexical_cast<int>(str); 
1

對不起下旬加入這個黨,但什麼是錯的:

int value; 
std::string number = "12345"; 
std::istringstream iss(number); 
iss >> value; 

如果你傳遞十六進制(而誰不是這些天),那麼你可以這樣做:

int value; 
std::string number = "0xff"; 
std::istringstream iss(number); 
iss >> std::hex >> value; 

這是C++,並沒有這種hackish減法ASCii的東西。

boost::lexical_cast<>()如果您使用的是提升方式,那麼方式不錯,乾淨。如果你不能保證傳遞的字符串是一個數字,那麼你應該捕獲拋出的錯誤。