自实现简单atoi功能

atoi这个库函数实在的太强大了,很多细节上的处理是我们无法想象的,不过最近也尝试做了一下这个练习,发现真的不是那么简单,只实现了一部分功能。如将字符串”123″转换为123,”-0123″转换为-123。代码功能比较简陋,还有诸多没有实现的功能,相比库函数atoi还差的很多,仅供参考。

#include <stdio.h>
#include <stdlib.h>

int myatoi(char* buf)
{
	// 备份一个文件指针
	char* buf_back = buf;
	// 记录返回值
	int myint = 0;
	// 记录首次出现数字字符的下标位置
	int fast_int = 0;
	// while循环中依次递增的索引
	int idx = 0;
	// 循环判断字符串是否走到了\0
	while (*buf)
	{
		// 如果*buf的ASCII码在48~57之间
		if (*buf >= 48 && *buf <= 57)
		{
			// 判断下标是否被记录过
			if (fast_int == 0)
			{
				// 如果下标为0证明没有被记录过
				// 那么记录下标为idx的值
				fast_int = idx;
			}
			// 将myint的值与新*buf的值合并 sum = sum*10+(n-48)
			myint = myint * 10 + (*buf - 48);
		}
		// 索引递增
		idx++;
		// 指针递增
		buf++;
	}
	// 如果首次发现的下标大于0
	if (fast_int > 0)
	{
		// 判断首次记录的下标的上一个下标对应的值是不是 "-" 号的ASCII码
		if (buf_back[fast_int - 1] == 45)
		{
			// 如果是则把myint值置为负数,就是*-1
			myint *= -1;
		}
	}
	// 返回myint的值
	return myint;
}

int main(int argc, char* argv[])
{
	printf("%d\n", myatoi("25"));
	printf("%d\n", myatoi("-025"));
	return 0;

}

评论