这篇文章主要介绍“C++怎么把字符串转为整数”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++怎么把字符串转为整数”文章能帮助大家解决问题。
字符串转为整数是很常用的一个函数,由于输入的是字符串,所以需要考虑的情况有很多种。博主之前有一篇文章是关于验证一个字符串是否为数字的,参见 Valid Number。在那篇文章中,详细的讨论了各种情况,包括符号,自然数,小数点的出现位置,判断他们是否是数字。个人以为这道题也应该有这么多种情况。但是这题只需要考虑数字和符号的情况:
1. 若字符串开头是空格,则跳过所有空格,到第一个非空格字符,如果没有,则返回0.
2. 若第一个非空格字符是符号 +/-,则标记 sign 的真假,这道题还有个局限性,那就是在 c++ 里面,+-1 和-+1 都是认可的,都是 -1,而在此题里,则会返回0.
3. 若下一个字符不是数字,则返回0,完全不考虑小数点和自然数的情况,不过这样也好,起码省事了不少。
4. 如果下一个字符是数字,则转为整形存下来,若接下来再有非数字出现,则返回目前的结果。
5. 还需要考虑边界问题,如果超过了整型数的范围,则用边界值替代当前值。
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; } }
关于“C++怎么把字符串转为整数”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。