下面程序需要用到的函数和讲解:
1. isspace函数----->int isspace(int c)
功能:检查所传是否为空白字符,要是所传字符是空白字符则返回非零值,否则返回0;空白字符包括(空格' ' , 水平制表符 '\t', 换行符 '\n', 垂直制表符'\v', 换页符'\f', 回车符'r')
2.isdigit函数------>int isdigit(int c);
功能:检查所传的字符是否是十进制数字字符,如果所传是一个数字,则该函数返回非零值,否则返回 0。
3.字符转换为数字的方法:
atoi的规则是:跳过不可见字符,碰到负号或者数字开始转换,转换到非数字字符为止。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
//VALID 表示结果合法
//INVALID 表示结果非法
enum State
{
VALID,//0 合法
INVALID//1 不合法
};
//默认结果可能非法,当正确转换后再改为合法
enum State state = INVALID;
int my_atoi(char *str)
{
int flag = 1;
long long ret = 0;
assert(str);
state = INVALID;
//跳过空白字符
while(isspace(*str))
{
str++;
}
if(*str == '\0')
{
return 0;
}
//跳过正负号
if(*str == '+')
{
str++;
}
else if(*str == '-')
{
flag = -1;
str++;
}
//开始转换数字字符直到非数字字符
while(isdigit(*str))
{
ret = ret * 10 + flag * (*str-'0');
if((ret > INT_MAX) || (ret < INT_MIN))
{
return 0;
}
str++;
}
//正常停止
if(*str == '\0')
{
state = VALID;
return (int)ret;
}
else
{
//遇到非数字字符
return (int)ret;
}
}
int main()
{
char *p = "-1212212121212";
printf("%d\n", my_atoi(p)); //输出:1212212121212
return 0;
}