Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1396194
  • 博文数量: 143
  • 博客积分: 10005
  • 博客等级: 上将
  • 技术积分: 1535
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-23 17:25
个人简介

淡泊明志 宁静致远

文章分类

全部博文(143)

文章存档

2011年(2)

2009年(1)

2007年(22)

2006年(118)

我的朋友

分类: C/C++

2007-01-04 08:34:40

C语言库函数源代码】

【本程序在Dev C++ 4.9.9.2 下编译通过】

#include

/*

   这个函数调用的是库函数中的

   strtol()函数,关于这个函数的

   源代码后面将会给出。

*/

int my_atoi(char *str)

{

   return (int) strtol(str, NULL, 10);

}

/*

   下面的两个函数没有调用strtol()函数,

   而是直接给出了该函数的实现。

*/

int my_atoi01(const char *str)

{

   long int v=0;

   int sign = 0;

 

   while ( *str == ' ')  str++;

 

   if(*str == '-'||*str == '+')

      sign = *str++;

 

   while (isdigit(*str))

   {

      v = v*10 + *str - '0';

      str++;

   }

   return sign == '-' ? -v:v;

}

int my_atoi02(char *str)

{

   int sign;

   int n;

   unsigned char *p;

 

   p=str;

   while (isspace(*p) ) p++;

 

   sign = (*p == '-' ) ? -1 : 1;

 

   if (*p=='+' || *p=='-' ) p++;

 

   for (n=0; isdigit(*p); p++)

      n = 10*n + (*p - '0');

 

   return sign*n;

}

 

int main()

{

   char * str = "2147483647";

   printf("%d\n",my_atoi(str));

  

   str = "-2147483648";

   printf("%d\n",my_atoi(str));

  

   str = "2147483647";

   printf("%d\n",my_atoi01(str));

  

   str = "-2147483648";

   printf("%d\n",my_atoi01(str));

  

   str = "2147483647";

   printf("%d\n",my_atoi02(str));

  

   str = "-2147483648";

   printf("%d\n",my_atoi02(str));

  

   system("pause");

   return 0;

}

阅读(9414) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~