函数介绍
int atoi( const char *string );
头文件:stdlib.h
功能:将字符串转换成整型数;atoi()会扫描参数string字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换(数字或正负号前面只能有空格,若有其它字符则放回数字0,即失败的情况),而再遇到非数字或字符串时(’\0’)才结束转化,并将结果返回(返回转换后的整型数)。
atoi使用
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *ptr1 = "-12345.12";
char *ptr2 = "+1234w34";
char *ptr3 = " 456er12";
char *ptr4 = "er789 123";
char *ptr5 = "0789 123";
int a = atoi(ptr1);
int b = atoi(ptr2);
int c = atoi(ptr3);
int d = atoi(ptr4);
int e = atoi(ptr5);
printf("a = %d, b = %d, c = %d, d = %d,e = %d\n", a, b, c, d, e);
return 0;
}
atoi模拟实现
#include<stdio.h>
#include<assert.h>
int my_atoi(const char* string)
{
assert(string != NULL);//断言,保证指针的有效性,防止野指针
char* tmp = (char*)string;//权限只能缩小不能放大,所以要强制类型转换
//先排除最前面的空格(如果有的话)
while ((*tmp)==' ')
{
tmp++;
}
//flag作为正负号的判断标志
int flag = 1;
//排除最前面的空格后判断第一个非空格字符
//如果该字符是正负号或者0 - 9的话正确
//要是其他字符就结束函数返回0
switch(*tmp)
{
case '+':
tmp++;//跳过正号到下一个字符位置
break;
case '-'://跳过负号到下一个字符位置,并把flag置为-1
flag = -1;
tmp++;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
break;
default://其他非正负号或者0 - 9字符,直接结束函数返回0
return 0;
}
//获取字符串中的整数
int ret = 0;
while (*tmp >= '0' && *tmp <= '9')
{
ret = ret * 10 + *tmp-'0';
tmp++;
}
return ret*flag;
}
int main()
{
//测试
char *ptr1 = "-12345.12";
char *ptr2 = "+1234w34";
char *ptr3 = " 456er12";
char *ptr4 = "0789 123";
int a = my_atoi(ptr1);
int b = my_atoi(ptr2);
int c = my_atoi(ptr3);
int d = my_atoi(ptr4);
printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);
return 0;
}