string test;
test="3527523";
int a=test[3];
std::cout<<a<<std::endl;
我期待輸出爲數字7,但我得到了55。 我已經搜遍了不同的帖子,他們都用這個方法沒有任何問題..我只是不知道問題出在我的情況。 謝謝你的幫助!將字符串轉換爲int的錯誤結果C++
string test;
test="3527523";
int a=test[3];
std::cout<<a<<std::endl;
我期待輸出爲數字7,但我得到了55。 我已經搜遍了不同的帖子,他們都用這個方法沒有任何問題..我只是不知道問題出在我的情況。 謝謝你的幫助!將字符串轉換爲int的錯誤結果C++
test[3]
返回char
,您將轉換爲整數,因此它返回該字符的ASCII值。 ASCII中的3
是55
。
嘗試使用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'在這裏做了什麼以使其成爲正確答案? – user2341380 2013-05-11 00:19:56
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」是一個字符文字,其ASCII值爲48.當算術應用於至少一個類型爲「char」的操作數時,將應用整數提升。這意味着「0」被轉換爲48.從「0」到「9」的字符值是48到53(你現在明白了:))? – 0x499602D2 2013-05-11 00:23:50
您可以通過括號(ASCII碼爲55(48 + 7))得到字符'7'。
問題是分配test[3]
到類型爲int
的變量,從而導致打印實際字符代碼(55)而不是代表字符('7'
)。在打印之前將int
替換爲char
或static_cast
。
你不「投」,你「轉換」。
可以使用其它功能中的sscanf(),的atoi()爲一個字符串的值轉換:
int iret = sscanf (test, "%d", &a);
試驗的值[3]是ASCII字符 '7',這實際上是整數「55」。
PS: 「sscanf()」的美妙之處在於您可以通過檢查「iret!= 1」輕鬆檢測是否發生了分析錯誤。
使用atoi:
int atoi(const char * str); //字符串轉換爲整數
例如:
string test;
test="3527523";
const char c = test[3];
int a=atoi(&c);
std::cout<<a<<std::endl;
'我'然後將等於號碼3527523.這不是他想要的。 – 0x499602D2 2013-05-11 00:27:44
需要C字符串。另外,這不會得到一位數字的價值,因爲OP的代碼顯示了一個嘗試。 – cHao 2013-05-11 00:28:29
你可以試試這個:[的atoi(http://www.cplusplus.com/reference/cstdlib/atoi/) – 2013-05-11 00:14:30
測試值[3]是'7'而不是7,ascii字符'7'的計算結果是55.參見http://www.cpptutor.com/imgs/ascii_table.gif – typ1232 2013-05-11 00:15:05
而不是'int a = test [3]'試試這個:'int a = test [3] - '0''。這應該打印'7'。 – yasouser 2013-05-11 00:17:20