字符串转换为整数”123“->123
来源:互联网 发布:linux定时任务crontab 编辑:程序博客网 时间:2024/05/29 14:33
字符串转换为整数”123“->123
题目描述:
输入一个由数字组成的字符串,把它转换成整数并输出。例如:输入字符串"123",输出整数123。
给定函数原型 int StrToInt(const char *str)
,实现字符串转换成整数的功能,不能使用库函数atoi。
题目分析:
将字符串正确转化为整数步骤
①当扫描第一个字符‘1’时候,由于为第一位,所以直接得到数字1
②当扫描第二个字符‘2’时候,1*10+2 = 12
③继续扫描字符‘3’时候,12*10+3=123
所以就是n = n * 10 + c;
易错处:
1)不能为空指针,否则访问空指针时程序会崩溃if(str == NULL)return 0;
2)要考虑正负符号加入sign标记
3)要考虑非法字符,例如空格之类的while(isspace(*str)) ++str 还需要检测当为数字时,我们才开始转化
4)整型的溢出,如果输入一个很长很长的字符串,可能照成整型的溢出方法一、可以将n定义为long long型;方法二、利用定义MAX_INT 和 MIN_INT(对0右移取反),通过比较n和MAX_INT/10的大小
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
参考代码:
int StrToInt(const char *str){ //对0取反再右移一位 static const int MAX_INT = (int)((unsigned)~0 >> 1); static const int MIN_INT = -(int)((unsigned)~0 >> 1)-1; unsigned int n = 0; //判断是否为空 if(str == NULL) return 0; //处理空格 while(isspace(*str)) ++str; //处理正负 int sign = 1; if(*str == '+' || *str == '-') { if(*str == '-') sign = -1; ++str; } //确定数字后才开始转化 while(isdigit(*str)) { //处理溢出 int c = *str - '0'; if(sign > 0 && (n > MAX_INT/10 || (n == MAX_INT/10 && c > MAX_INT%10))) { n = MAX_INT; break; } else if(sign < 0 && (n > (unsigned)MIN_INT/10 || (n == (unsigned)MIN_INT/10 && c > (unsigned)MIN_INT%10))) { N = MIN_INT; break; } n = n * 10 + c; ++str; } return sign > 0 ? n : -n;}
0 0
- 字符串转换为整数”123“->123
- 字符串转换为整数
- 字符串转换为整数
- 字符串转换为整数
- 字符串转换为整数
- 字符串转换为整数
- 字符串转换为整数
- 字符串转换为整数
- 字符串转换为整数
- 字符串转换为整数
- 字符串转换为整数
- 整数转换为字符串
- 字符串转换为整数
- 字符串转换为整数
- 整数转换为字符串
- 字符串转换为整数
- 字符串转换为整数
- 字符串转换为整数
- 黑马程序员--泛型学习
- 字符串包含
- Android学习路线(十三)Activity生命周期——暂停和恢复(Pausing and Resuming )一个Activity
- 变位词
- OpenCV在矩阵上的卷积
- 字符串转换为整数”123“->123
- C# UDP通信
- double型转换成string型
- 第九次codeforces竞技结束 #260 Div 2
- Android学习路线(十四)Activity生命周期——停止和重启(Stopping and Restarting)一个Activity
- C/C++数据类型的转换
- Android学习路线(十五)Activity生命周期——重新创建(Recreating)一个Activity
- win7 安装oracle以后SP2-1503
- Using HTTP Proxy in Node.js with request package