本文小编为大家详细介绍“C语言如何实现将字符串转换成整数”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言如何实现将字符串转换成整数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
这是一个很有意思的问题。请不要把这个问题想的太简单了,考虑问题时应该尽可能的全面一些。请先思考并且实现这个函数,再来看讲解。
分析一下:函数名是StrToInt,那么可以这么调用:
int ret = StrToInt("1234"); printf("%d ", ret);
如果你写的程序能够正确输出1234,然后就觉得这道题就这样了,那么考虑的就不够全面。有没有一种可能:
1.传参时传了NULL指针。
2.传入空字符串。
3.字符串前面有空格,如:" 1234"。
4.有正负号,如:“-1234”。
5.有非法字符,如:“1234abcd”。
6.数字太大了,超出了int的存储范围,如:“1111111111111111111111111111111111111”。
下面我们一个一个解决。
准备工作
由于有可能出现非法字符,或者空字符串等,会有一些情况的转换是非法的。所以,定义一个全局性质的枚举类型来检验转换是否合法:
enum State { VALID, INVALID }s = INVALID;
默认的情况是非法的,只有转换成功才会把s的值置为VALID。
先把函数的框架撘出来:
int StrToInt(const char* str) { }
接下来开始解决以下问题:
1.NULL指针
NULL指针是不能解引用的!所以最好断言一下。
int StrToInt(const char* str) { // 如果str是NULL,不能对其解引用 assert(str); return ret; }
2.空字符串
如果一上来就遇到了’ ’,那么就是空字符串。
int StrToInt(const char* str) { // 如果str是NULL,不能对其解引用 assert(str); // 空字符串 if (*str == '