// Filename: main.c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include "public.h"
// 库函数atoi实现要求:
// 1. 字符串开头如果有空格,则忽略;数字串中间有空格,则认为转换结束;
// 2. 从正号“+”、负号“-”、数字“0-9”开始进行转换,直至遇到非数字“0-9”结束;
// 3. 如果开头正号“+”(或者负号“-”)后面的字符含有正号“+”(或者负号“-”),则后面的正号“+”(或者负号“-”)处结束转换;
// 4. 如果没有任何有效数字,返回0;
int atoi_ex(const char *p)
{
int i = 0;
bool flag = TRUE; // TRUE为正数,FALSE为负数
// 前导空格和正负号处理
while (p)
{
if (' ' == *p)
{
p++;
}
else if ('+' == *p)
{
flag = TRUE;
p++;
break;
}
else if ('-' == *p)
{
flag = FALSE;
p++;
break;
}
else
{
break;
}
}
// 前导空格和正负号已处理完,这里只处理“0-9”的数字,不是数字则结束
while (p)
{
if (*p >= '0' && *p <= '9')
{
i = i * 10 + (*p - 0x30);
p++;
}
else
{
break;
}
}
if (FALSE == flag)
{
i = 0 - i;
}
return i;
}
int main()
{
char a[] = " -100";
int c, d;
c = atoi(a);
printf("c = [%d].\n", c);
d = atoi_ex(a);
printf("d = [%d].\n", d);
return 0;
}