這篇文章主要介紹“C++怎么把字符串轉(zhuǎn)為整數(shù)”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“C++怎么把字符串轉(zhuǎn)為整數(shù)”文章能幫助大家解決問(wèn)題。
成都創(chuàng)新互聯(lián)公司主營(yíng)綏棱網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app軟件定制開(kāi)發(fā),綏棱h5微信小程序開(kāi)發(fā)搭建,綏棱網(wǎng)站營(yíng)銷(xiāo)推廣歡迎綏棱等地區(qū)企業(yè)咨詢(xún)
字符串轉(zhuǎn)為整數(shù)是很常用的一個(gè)函數(shù),由于輸入的是字符串,所以需要考慮的情況有很多種。博主之前有一篇文章是關(guān)于驗(yàn)證一個(gè)字符串是否為數(shù)字的,參見(jiàn) Valid Number。在那篇文章中,詳細(xì)的討論了各種情況,包括符號(hào),自然數(shù),小數(shù)點(diǎn)的出現(xiàn)位置,判斷他們是否是數(shù)字。個(gè)人以為這道題也應(yīng)該有這么多種情況。但是這題只需要考慮數(shù)字和符號(hào)的情況:
1. 若字符串開(kāi)頭是空格,則跳過(guò)所有空格,到第一個(gè)非空格字符,如果沒(méi)有,則返回0.
2. 若第一個(gè)非空格字符是符號(hào) +/-,則標(biāo)記 sign 的真假,這道題還有個(gè)局限性,那就是在 c++ 里面,+-1 和-+1 都是認(rèn)可的,都是 -1,而在此題里,則會(huì)返回0.
3. 若下一個(gè)字符不是數(shù)字,則返回0,完全不考慮小數(shù)點(diǎn)和自然數(shù)的情況,不過(guò)這樣也好,起碼省事了不少。
4. 如果下一個(gè)字符是數(shù)字,則轉(zhuǎn)為整形存下來(lái),若接下來(lái)再有非數(shù)字出現(xiàn),則返回目前的結(jié)果。
5. 還需要考慮邊界問(wèn)題,如果超過(guò)了整型數(shù)的范圍,則用邊界值替代當(dāng)前值。
C++ 解法:
class Solution { public: int myAtoi(string str) { if (str.empty()) return 0; int sign = 1, base = 0, i = 0, n = str.size(); while (i < n && str[i] == " ") ++i; if (i < n && (str[i] == "+" || str[i] == "-")) { sign = (str[i++] == "+") ? 1 : -1; } while (i < n && str[i] >= "0" && str[i] <= "9") { if (base > INT_MAX / 10 || (base == INT_MAX / 10 && str[i] - "0" > 7)) { return (sign == 1) ? INT_MAX : INT_MIN; } base = 10 * base + (str[i++] - "0"); } return base * sign; } };
Java 解法:
public class Solution { public int myAtoi(String str) { if (str.isEmpty()) return 0; int sign = 1, base = 0, i = 0, n = str.length(); while (i < n && str.charAt(i) == " ") ++i; if (i < n && (str.charAt(i) == "+" || str.charAt(i) == "-")) { sign = (str.charAt(i++) == "+") ? 1 : -1; } while (i < n && str.charAt(i) >= "0" && str.charAt(i) <= "9") { if (base > Integer.MAX_VALUE / 10 || (base == Integer.MAX_VALUE / 10 && str.charAt(i) - "0" > 7)) { return (sign == 1) ? Integer.MAX_VALUE : Integer.MIN_VALUE; } base = 10 * base + (str.charAt(i++) - "0"); } return base * sign; } }
關(guān)于“C++怎么把字符串轉(zhuǎn)為整數(shù)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。