008将字符串转换为整数
来源:互联网 发布:缉毒警察知乎 编辑:程序博客网 时间:2024/06/05 12:04
题目描述
输入一个由数字组成的字符串,把它转换成整数并输出。例如:输入字符串"123",输出整数123。
给定函数原型int StrToInt(const char *str)
,实现字符串转换成整数的功能,不能使用库函数atoi。
思路:对于字符串“123”,计算过程是n = n*10 + c,其中,n是最后所求数字,c是当前数字,线性扫描即可
但是还需要考虑其他问题,一是空指针;二是符号问题,“+”,“-”;三是非法字符问题;四是整数溢出。
空指针直接退出,符号用sign表示,非法字符用isDigit()进行判断,对于整数溢出,
当整数发生溢出时,取最大或最小的int值,int的表示范围是MAX_INT:2147483647,MIN_INT:-2147483648。
判断n与MAX_INT和MIN_INT的关系,如果n>MAX_INT/10,那么n=n*10+c必然大于MAX_INT,如果n==MAX_INT,则判断c和MAX_INT%10的关系,如果c>MAX_INT%10,那么n=n*10+c>MAX_INT,对于MIN_INT,判断方法相似,只不过MIN_INT = -MAX_INT-1,需要单独判断
bool isDigit(char c){if(c>='0' && c<='9')return true;return false;}bool isSpace(char c){if(c == ' ')return true;return false;}int StrtoInt(const char *string){const int MAX_INT = 2147483647;const int MIN_INT = -2147483648;unsigned int n = 0;const char* str = string ;while(isSpace(*str)){str ++;}bool sign = true;if(*str == '-'){sign = false;str++;}else if(*str == '+'){str++;}else if(isDigit(*str)){}else {return 0;}while(isDigit(*str)){int c = *str - '0';if(sign && (n>MAX_INT/10 || (n==MAX_INT/10 && c > MAX_INT%10))){return MAX_INT;}else if( !sign && (n>(unsigned)MIN_INT/10) || (n==(unsigned)MIN_INT/10 && c> (unsigned)MIN_INT%10)){return MIN_INT;}else{n = n*10 +c;str ++;}}if(*str == '\0'){ if(sign){return n; }else{return -1 * n;}}return 0;}
举一反三
- 实现string到double的转换《待续。。。》
分析:此题虽然类似于atoi函数,但毕竟double为64位,而且支持小数,因而边界条件更加严格,写代码时需要更加注意。
0 0
- 008将字符串转换为整数
- 将整数转换为字符串
- 将字符串转换为整数
- 将字符串转换为整数
- 将字符串转换为整数
- 将字符串转换为整数
- 将字符串转换为整数
- 将字符串转换为整数
- 将整数字符串转换为整数
- 将C字符串转换为整数
- 将一个字符串转换为整数
- 将一个整数转换为字符串
- 将整数转换为宽字符串
- 将字符串转换为整数并输出
- 递归将整数n转换为字符串
- 递归法将整数转换为字符串
- 将一个字符串转换为整数
- 将一个字符串转换为整数1
- 来电拦截_通过Broadcast修改Activity中的UI
- 王石:活着的意义在哪?
- 利用DHT网络原理制作bt采集蜘蛛,开源版
- 简易扫雷版本 .
- 黑马程序员----java高新技术--泛型
- 008将字符串转换为整数
- [全国首发]Swift视频教程 -(视频持续更新 - 2014.6.24更新)
- 基于开源项目的WebApp开发
- UICollectionView
- IBSHEET HTML 개발가이드
- 符合j2ee标准的web application + web.xml
- 关于DELL机器每次开机都有F1F2提示,需要F1才可以进系统的常规解决方案
- 利用DHT网络原理制作bt采集蜘蛛,开源版
- vbdfhrth