8. String to Integer (atoi)
来源:互联网 发布:js 闪动效果 编辑:程序博客网 时间:2024/06/08 08:47
出现的问题:
1.不是输出数字而是返回数字
2.遇到正负号不break
3.字符‘0’-‘9’的对应的整型范围是48-58
4.string类型的length是个函数而不是一个变量所以要用str.length()
5.最后输出的时候可以和*10再加下一位
6.例如“ +0 123”也要返回0
自己的代码(40ms):
#include "stdafx.h"#include<iostream>#include<string>#include<vector>#include<math.h>using namespace std;int main(){ string str; vector<int> jishu; cin >> str; int flag = 0, count = 0,sym = 0 ; int result = 0; for (int i = 0; i < str.length(); i++) { if (str[i] >= 48 && str[i] < 59) { //cout << int(a[i] - '0') << endl; /*if (sym == 1) { jishu.push_back(-int(str[i] - '0')); sym = 0; } else */ jishu.push_back(int(str[i] - '0')); flag = 1; } else if (str[i] == 45&&flag!=1) { if (sym != 0) break; sym = 1; flag = 1; } else if (str[i] == 43 && flag != 1) { if (sym != 0) break; sym = 2; flag = 1; } else if (str[i] == ' '&& flag != 1) { continue; } else { break; } } for (int i = 0; i < jishu.size(); i++) { /*if (jishu[i] < 0) { jishu[i] = -jishu[i]; result += jishu[i] * pow(10, count); result = -result; } else*/ result = count*10+jishu[i]; if (result / 10 != count) { if (sym == 1) return INT_MIN; else return INT_MAX; } count = result; } if (sym == 1) result = -result; cout << result; getchar(); return 0;}
大牛写的代码分析:
int atoi(const char *str) { int sign = 1, base = 0, i = 0; //除去字符串前面的空格 while (str[i] == ' ') { i++; } //当遇到字符为'-'时,则sign为-1,否则为1 if (str[i] == '-' || str[i] == '+') { sign = 1 - 2 * (str[i++] == '-'); } //当符号后(或者无符号)遇到字符为数字的时候进行转换 //若先遇到非符号或者非数字的情况的时候,则直接返回0 while (str[i] >= '0' && str[i] <= '9') { //1.若在加上最后一位之前的数大于了INT_MAX/10,则说明加上最后一位后一定会溢出,而atoi的函数功能是当遇到最大溢出 //的时候则输出最大值就可以,所以直接根据符号进行return最大和最少值即可。 //2.若加上最后一位之前的数等于INT_MAX/10,则加上最后一位有可能不会溢出,则这时候需要进行判断,由于int最大值为 //2147483647,则最后一位大于7则溢出,操作同上 if (base > INT_MAX / 10 || (base == INT_MAX / 10 && str[i] - '0' > 7)) { if (sign == 1) return INT_MAX; else return INT_MIN; } base = 10 * base + (str[i++] - '0'); } return base * sign;}
0 0
- 8.String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8.String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 条件语句
- HDU 3849 By Recognizing These Guys, We Find Social Networks Useful 找出所有割边
- Ubantu 14.04 安装 PCL
- 成为优秀Java程序员的10个要点
- 字符串常量作为模板参数的陷阱
- 8. String to Integer (atoi)
- 对于javaweb项目的catalina错误解决
- nodejs读取图片像素
- Android开发中退出程序的方法
- MySQL 中使用什么数据类型表示时间
- 01背包 hdu3446
- 张高兴的 UWP 开发笔记:用 Thumb 控件仿制一个可拖动 Button
- 手写登录借口,jsonp跨域传值
- JavaWeb 之 HttpServletResponse