2013-05-11 76 views
1
string test; 
test="3527523"; 
int a=test[3]; 
std::cout<<a<<std::endl; 

我期待輸出爲數字7,但我得到了55。 我已經搜遍了不同的帖子,他們都用這個方法沒有任何問題..我只是不知道問題出在我的情況。 謝謝你的幫助!將字符串轉換爲int的錯誤結果C++

+1

你可以試試這個:[的atoi(http://www.cplusplus.com/reference/cstdlib/atoi/) – 2013-05-11 00:14:30

+6

測試值[3]是'7'而不是7,ascii字符'7'的計算結果是55.參見http://www.cpptutor.com/imgs/ascii_table.gif – typ1232 2013-05-11 00:15:05

+1

而不是'int a = test [3]'試試這個:'int a = test [3] - '0''。這應該打印'7'。 – yasouser 2013-05-11 00:17:20

回答

6

test[3]返回char,您將轉換爲整數,因此它返回該字符的ASCII值。 ASCII中的355

嘗試使用char而不是作爲a類型:

char a = test[3]; 

std::cout << a; // 3 

如果你想要的結果是一個整數,從'0'減去字符:

std::string test = "3527523"; 

int a = test[3] - '0'; 

std::cout << a; // 3 
+0

非常感謝您的幫助。我知道我問了一個非常愚蠢的問題 那麼'0'在這裏做了什麼以使其成爲正確答案? – user2341380 2013-05-11 00:19:56

+0

user2341380,如果你查閱一個ASCII值表,「0」,「1」,「2」,「3」,「4」......的值是48, 49,50,51 ...所以當你從48(「0」)中減去51(「3」)時,你得到了3.適用於所有的ASCII數字。 – Patashu 2013-05-11 00:23:21

+0

「0」是一個字符文字,其ASCII值爲48.當算術應用於至少一個類型爲「char」的操作數時,將應用整數提升。這意味着「0」被轉換爲48.從「0」到「9」的字符值是48到53(你現在明白了:))? – 0x499602D2 2013-05-11 00:23:50

0

您可以通過括號(ASCII碼爲55(48 + 7))得到字符'7'。

0

問題是分配test[3]到類型爲int的變量,從而導致打印實際字符代碼(55)而不是代表字符('7')。在打印之前將int替換爲charstatic_cast

0

你不「投」,你「轉換」。

可以使用其它功能中的sscanf(),的atoi()爲一個字符串的值轉換:

int iret = sscanf (test, "%d", &a);

試驗的值[3]是ASCII字符 '7',這實際上是整數「55」。

PS: 「sscanf()」的美妙之處在於您可以通過檢查「iret!= 1」輕鬆檢測是否發生了分析錯誤。

0

使用atoi:

int atoi(con​​st char * str); //字符串轉換爲整數

例如:

string test; 
test="3527523"; 
const char c = test[3]; 
int a=atoi(&c); 
std::cout<<a<<std::endl; 
+0

'我'然後將等於號碼3527523.這不是他想要的。 – 0x499602D2 2013-05-11 00:27:44

+0

需要C字符串。另外,這不會得到一位數字的價值,因爲OP的代碼顯示了一個嘗試。 – cHao 2013-05-11 00:28:29