这是一道被我遗漏了好久的一道题,最近被考到了,才发现好像被自己遗漏了,再次记录一下,就算查漏补缺吧。
atoi
atoi函数功能:用来将一个字符串转换为整形。
该函数会从第一个字符开始跳过前面的空格,直到遇到正负号才开始转换,遇到非数字或‘\0’结束转换。如果不能转换或是空字符串就返回0。
首先我们先考虑需要用到的测试用例:
比如
正负数:“+1234”“-1234”
非数字:“abcd”
数字:“1234”
混合:“1234abcd”
用库函数atoi测试一下结果:
下面是代码:
#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int my_atoi(const char *str)
{
assert(str);
int num=0;
int sign=1;
char *p=(char *)str;
while(*p!='\0')
{
if(*p==' ')
{
p++;
}
else if(*p=='+')
{
p++;
sign=1;
}
else if(*p=='-')
{
p++;
sign=-1;
}
while(*p>'0'&&*p<'9')
{
int n=*p -'0';
p++;
num=(num*10+n);
}
return sign*num;
}
return 0;
}
int main()
{
char str1[]="abcd";
char str2[]="1234";
char str3[]="-1234";
char str4[]="1234abcd";
printf("%d\n",my_atoi(str1));
printf("%d\n",my_atoi(str2));
printf("%d\n",my_atoi(str3));
printf("%d\n",my_atoi(str4));
}
测试结果如下:
思路:首先要检测空格跳过空格,其次检测正号负号,将其记录下来用来返回带符号的结果,然后转换字符,将单个字符减字符0就能转换为数字,然后通过计算得出转换结果,注意的是:不能用指针再来接受转换后的结果,用指针来接受,不论是单个字符的结果还是最后的结果。