C语言 字符数组转换整数 stringToInt
来源:互联网 发布:网络餐饮监管存在问题 编辑:程序博客网 时间:2024/06/05 20:20
工作了一段时间,一直在公司平台上面码代码,有一天同事分享,突然发现自己连基本的知识都快忘记了
字符串转化z整数数组是考验程序员基本功的经典题目
int stringToInt(const char *str){}
先写一个简单的实现
int stringToInt(const char *str){char *p = str;int nNUM = 0;while (*p != '\0'){nNum = nNUM * 10 + (*p - '0');p++;}return nNUM;}
主要逻辑应该就是这样,每取一位字符,用字符和'0'比较计算数值,累加到前面的数值*10上面
前面的基础上考虑一下正负数问题
int stringToInt(const char *str){char *p = str;int nNUM = 0;bool bFlage = true;if (*p == '-'){bFlage = false;p++;}else if (*p == '+'){p++;}while (*p != '\0'){nNum = nNUM * 10 + (*p - '0');p++;}if (!bFlage){nNUM = 0 - nNUM;}return nNUM;}
除了+-还有其他非法字符,需要容错处理
int stringToInt(const char *str){char *p = str;int nNUM = 0;bool bFlage = true;if (*p == '-'){bFlage = false;p++;}else if (*p == '+'){p++;}while (*p != '\0'){if ((*P < '0') || (*p > '9')){nNUM = 0;return nNUM;}nNum = nNUM * 10 + (*p - '0');p++;}if (!bFlage){nNUM = 0 - nNUM;}return nNUM;}上面的代码无法判断0 是成功转换的字符串,还是非法数据之后的返回值,因此定义一个枚举常量,保存每次转换是否成功,可以使用系统枚举值,一般库函数都是自带的,保存对应操作是否成功
enum NumState{OK = 1,ERROR}int stringToInt(const char *str){char *p = str;int nNUM = 0;bool bFlage = true;enum NumState oState = OK;if (*p == '-'){bFlage = false;p++;}else if (*p == '+'){p++;}while (*p != '\0'){if ((*P < '0') || (*p > '9')){nNUM = ERROR;return nNUM;}nNum = nNUM * 10 + (*p - '0');p++;}if (!bFlage){nNUM = 0 - nNUM;}return nNUM;}
在考虑一下,除了上面问题应该还有溢出的问题,增加溢出的判断
int stringToInt(const char *str){char *p = str;int nNUM = 0;bool bFlage = true;enum NumState oState = OK;if (*p == '-'){bFlage = false;p++;}else if (*p == '+'){p++;}while (*p != '\0'){if ((*p < '0') || (*p > '9')){oState = ERROR;nNUM = 0;break;}if ((nNUM * 10)>0 && (*p - '0')&& (2147483647 - (nNUM * 10) < (*p - '0'))){oState = ERROR;nNUM = 0;break;}nNUM = nNUM * 10 + (*p - '0');p++;}if (!bFlage){nNUM = 0 - nNUM;}return nNUM;}
测试一下:
#include <stdio.h>#include <stdbool.h>enum NumState{OK = 1,ERROR};int stringToInt(const char *str){char *p = str;int nNUM = 0;bool bFlage = true;enum NumState oState = OK;if (*p == '-'){bFlage = false;p++;}else if (*p == '+'){p++;}while (*p != '\0'){if ((*p < '0') || (*p > '9')){oState = ERROR;nNUM = 0;break;}if ((nNUM * 10)>0 && (*p - '0')>0&& (2147483647 - (nNUM * 10) < (*p - '0'))){oState = ERROR;nNUM = 0;break;}nNUM = nNUM * 10 + (*p - '0');p++;}if (!bFlage){nNUM = 0 - nNUM;}return nNUM;}int main(){int nNum;nNum = stringToInt("-2147483647");printf("%d\n", nNum);return 0;}
不要忽视容错机制,很重要
0 0
- C语言 字符数组转换整数 stringToInt
- C语言程序之整数转换为相应的一个字符数组
- c语言字符数组大小写转换
- 【c语言】将二进制整数转换为字符
- 整数转换为字符数组
- C语言--字符转整数
- c语言字符转换
- C语言字符数组
- C语言----字符数组
- C语言字符数组
- c语言字符数组
- C语言 将字符数组转换为字符串
- c语言字符串整数转换
- 【C++】:stringToInt intToString
- C语言itoa()函数和atoi()函数详解---整数与字符互相转换C函数
- C语言itoa()函数和atoi()函数详解---整数与字符互相转换C函数
- 实现一个函数stringToInt,实现把字符串转换成整数这个功能
- c语言中的字符转换为整数 为什么不能运行成功
- POJ 1251 Jungle Roads(Prim算法)
- BZOJ3680 吊打XXX
- opencv3.1.0 特征点检测与图像匹配(features2d、xfeatures2d)
- 使用pbc
- 洛谷 P2330 05四川 繁忙的都市
- C语言 字符数组转换整数 stringToInt
- 《TCP/IP详解 卷1:协议》 读书笔记 第3章 IP:网际协议
- 平面方程推导
- 华为上机题汇总(一)
- Android 缓存
- Lua数据类型
- Hibernate对象的生命周期及三种状态
- 购物车的实现原理
- Android Launcher3 强制横屏