【剑指offer】字符串转换为数字,C++实现
2024-10-20 21:00:16
# 题目
把字符串转换成整数
# 思路
1.功能测试
正数/复数/0
2.边界值测试
最大的正整数/最小的负整数(数据上下溢出)
3.特殊输入测试
- 空字符串“”的处理,返回0,设置非法输入
- 字符串只有符号位的处理,返回0,设置非法输入
- 输入的字符串中有非数字字符,返回0,设置非法输入
# 代码
#include <iostream>
#include <string>
using namespace std;
// 67:把字符串转换成整数
class Solution {
public:
/*全局变量*/
enum {kValid,kInvalid}; // 枚举元素(kValid=0,kInvalid=1)
int g_nStatus = kValid; // 标记是否是非法输入 /*功能函数*/
int StrToInt(string str)
{
g_nStatus = kInvalid; // 初始标记为非法输入
long long num = 0; // 存储结果
const char* cstr = str.c_str();// 指向字符数组的指针 // 判断是否是空指针和空字符串""
if( (cstr != NULL) && (*cstr != '\0') )
{
// 处理符号位
int minus = 1;
if(*cstr == '-')
{
minus = -1;
cstr++;
}
else if(*cstr == '+')
{
minus = 1;
cstr++;
} // 处理其余位
while(*cstr != '\0')
{
if(*cstr > '0' && *cstr < '9')
{
// string转int类型
g_nStatus = kValid; // 标记为合法输入
num = num*10 + (*cstr -'0'); // string转换为int类型
cstr++; // 数据上下溢出
if( ((minus>0) && (num > 0x7FFFFFFF)) ||((minus<0) && (num > 0x80000000)) )
{
g_nStatus = kInvalid; // 如果溢出,则标记为非法输入
num = 0;
break;
}
}
else
{
g_nStatus = kInvalid;
num = 0;
break;
}
} if(g_nStatus == kValid)
num = num * minus; }
cout<<(int)num<<endl;
return (int)num;
}
};
int main()
{
string str = "123";
Solution solution;
solution.StrToInt(str);
return 0;
}
最新文章
- [LeetCode] Rotate Function 旋转函数
- php glob()函数实现目录文件遍历与寻找与模式匹配的文件路径
- java设计模式之工厂方法探究
- 一键系统优化15项脚本,适用于Centos6.x
- 突然顿悟的Javascript中的this
- 二分图匹配 分类: ACM TYPE 2014-10-01 19:57 94人阅读 评论(0) 收藏
- hdu 2087 剪花布条 KMP多次匹配
- Android多语言支持以及各国语言Values文件夹命名规则
- Java连接MySQL中文乱码处理【转载】
- javascript 网页图标音乐切换
- @PostConstruct 和 @PreDestory
- 妙用transform
- eclipse快捷键 自己使用简单总结
- vue.js 组件之间传递数据
- GIF动态图制作
- Linux中给普通用户添加sudo权限
- Android Studio3.1.2升级问题:Configuration &#39;compile&#39; is obsolete and has been replaced with &#39;implementation&#39;.
- Visual Studio 2017 扩展
- 网络编程,socket
- Linux下锁定账号,禁止登录系统的设置总结【转】