在C语言中可以通过atoi()函数实现将char 数字 转化为 int 类型
例如:
char ch[] = "123456"; ---->int i = 123456
char *ch1 = "-5678"; ---->int i = -5678
char ch2[] = " -3456"; ---->int i = -3456
那么我们可以怎么实现这个功能呢
首先需要考虑几个问题:
1、字符是否为空
2、前面是否有空格
3、是否带有正负号
4、是否为数字,而不是其他字符
5、是否会溢出 int类型在大多数编译器中为4个字节,大于65535则溢出
下面是根据以上的要求实现的代码,还有一些具体要求这边暂时没有写进来,例如"123abc"这类字符的处理
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int atoi2(const char *ch)
{
int num = 0,sign = 1;
//判断传进来的参数是否为空
if(ch == NULL)
return 0;
//跳过前面的空格,并判断有没有正负号
while(*ch == ' ') ch++;
if(*ch == '+') { sign = 1;ch++;}
if(*ch == '-') { sign = -1;ch++;}
//读取内容且须为数字
while((*ch >= '0')&&(*ch <='9')){
num = num*10 + (*ch -'0');
ch++;
//判断是否溢出65535
if(num >65535) return 0;
}
return num*sign;
}
int main()
{
char ch[] = "12345612345678";
char *ch1 = "-5678";
char ch2[] = " -3456";
char ch3[] = "abc123";
printf("12345612345678=%d\n",atoi2(ch));
printf("-5678=%d\n",atoi2(ch1));
printf(" -3456=%d\n",atoi2(ch2));
printf("abc123=%d\n",atoi2(ch3));
return 0;
}
最后的实现结果: