欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

剑指offer 算法 (综合)

发布时间:2025/10/17 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 剑指offer 算法 (综合) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。

解析:现在才发现,原来字符串转数字特蛋疼,很多细节,以前从来就没考虑过,鲁棒性啊!!! 

 首先,得定义个标志位LegitimateInput,表示串str是否为合法输入,初始化为1:合法输入。开始判断啦~~~若str空串,直接LegitimateInput置0,return 0退出;不是空串,那么,开始分析每个字符。定义标志minus表示是否为负数,初始化为-1。读首个字符,若为‘+’或者‘-’,minus置位,1:正,0:负,下标位pos+1;之后,开始逐个读字符计算数字,i从pos开始读至串尾,一旦出现非‘0’~‘9’之间的字符,LegitimateInput置0,sum置0,并退出循环(可以直接return 0);否则继续循环,每次计算一遍,还有判断数字是否上溢或下溢,并做处理。循环结束,若是正确合理输入,给LegitimateInput置1,并且若minus为-1,sum结果记得取反哦

反正,一切细心细心再细心,要考虑全部情况

class Solution { public:int LegitimateInput = 1;//0:表示不合法输入 1:表示合法输入int StrToInt(string str) {if(str.size()==0){LegitimateInput=0;return 0;}int sum=0;int minus=-1;//负数标志 1为负数int pos=0;//下标if(str[0] == '-'){minus=1;pos++;} else if(str[0] == '+'){minus=0;pos++;}int i;for(i=pos;i<str.size();i++){if(str[i] >= '0' && str[i] <= '9')sum=sum*10+(str[i]-'0');else {sum=0;LegitimateInput=0;break;}if(minus==0 && sum > 2147483647){//上溢出sum=0;LegitimateInput=0;break;}if(minus==1 && sum < -2147483648){//下溢出sum=0;LegitimateInput=0;break;}}if(sum == 0 && minus != -1 && str.size() == 1){LegitimateInput=0;//正负号 直接结束}if(str[i]== '\0' && sum != 0){if(minus==1)sum=-sum;LegitimateInput=1;}return sum;} };

总结

以上是生活随笔为你收集整理的剑指offer 算法 (综合)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。