字符串转整数一种实现
来源:互联网 发布:cydia中文软件源 编辑:程序博客网 时间:2024/04/29 15:15
step1 判断字符串是否是有效字符串
step2 将字符串转换成整数
需要注意点
step1中列举以下几个例子
case1 "a13"
case2 "-"
case3 "-0"
case4 "01"
case5 "23dfd"
step2中需要注意的是
整数是有符号的
(c++中的表示climts库中的宏) INT_MAX INT_MIN的绝对值不同 (对应的是有符号整数的最大值和最小值)
在转换的时候需要注意符号对应的变化
接下来会附上代码
#include <iostream>#include <string>#include <climits>using namespace std;//判断是否是有效字符串bool is_value(const string& s){ if(s[0] != '-' && (s[0] < '0' || s[0] > '9')) //这里的逻辑一定要弄清楚 return false; //只有当第一个不是'-'和数字的时候就返回 if(s[0] == '-' && (s.size() == 1 || s[1] == '0')) return false; if(s[0] == '0' && s.size() > 1) return false; //到此为止我们对字符串的第一个字符的判断结束 for(size_t i = 1; i < s.size(); i++) if(s[i] < '0' || s[i] > '9') return false; return true; //将所有的可能性排除后剩下的可能}int str_to_int(const string& s){ if(s.size() == 0) return 0; if(!is_value(s)) return 0; bool pos = s[0] == '-' ? false : true; //符号位判断 int minq = INT_MIN / 10; //因为INT_MIN的绝对值会比INT_MAX大一所以我们用范围大的 int minr = INT_MIN % 10; int res = 0; int cur = 0; for(size_t i = pos ? 0 : 1; i < s.size(); i++) { cur = '0' - s[i]; //负值 if(res < minq || (res == minq && cur < minr)) return 0; //溢出 res = res * 10 + cur; //负值的相加 } if(pos && res == INT_MIN) //溢出 return 0; return pos ? -res : res;}int main(){ string str1("a12"); string str2("-"); string str3("-0"); string str4("08"); string str5("97afda"); string str6("4294967295"); string str7("2147483647"); string str8("-2147483648"); string str9("7386234"); string str10("6738764"); cout << "str1(a12) " << str_to_int(str1) << endl; cout << "str2(-) " << str_to_int(str2) << endl; cout << "str3(-0) " << str_to_int(str3) << endl; cout << "str4(08) " << str_to_int(str4) << endl; cout << "str5(97afda) " << str_to_int(str5) << endl; cout << "str6(4294967295) " << str_to_int(str6) << endl; cout << "str7(2147483647) " << str_to_int(str7) << endl; cout << "str8(-2147483648) " << str_to_int(str8) << endl; cout << "str9(7386234) " << str_to_int(str9) << endl; cout << "str10(\"6738764\") " << str_to_int(str10) << endl; //双引号要转义 //cout << INT_MAX << '\t' << INT_MIN << endl; return 0;}
0 0
- 字符串转整数一种实现
- 整数转字符串的一种快速实现
- 整数转字符串的一种快速实现
- 一种不使用字符串检验一个整数是否包含一个整数的c#实现方法
- atoi字符串转整数实现
- 整数转固定长度的字符串的一种方法
- 字符串转整数的java实现
- 字符串转整数(atoi) 十进制实现
- java 自己实现字符串转整数
- 字符串转整数,MyAtoi方法的实现
- 字符串转整数函数stoi()实现
- 实现整数转成字符串
- 大整数乘法的一种实现~~~
- 一种整数数据压缩存储的算法实现
- 一种整数数据压缩存储的算法实现
- 字符串string转整数int 实现自己的atoi函数
- C语言字符串转int整数的实现源代码
- 字符串处理------字符串转整数
- Linux(Ubuntu)下嵌入式gdb调试环境
- C++之继承
- 交换排序
- (Java实现)HDOJ 2064 汉诺塔III && 2077 汉诺塔IV
- 交叉工具链
- 字符串转整数一种实现
- Java IO学习
- Python 列表count()函数元素次数统计
- RTMP协议
- Linux下安装Oracle出现的一些错误,以及解决方法
- leetcode——81——Search in Rotated Sorted Array II
- unique()去重函数
- 使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件
- Matlab 的fspecial函数用法