Chinaunix首页 | 论坛 | 博客
  • 博客访问: 550100
  • 博文数量: 181
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1498
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-22 15:17
个人简介

用发呆的时间来理清自己的思绪

文章存档

2015年(7)

2014年(134)

2013年(40)

分类: C/C++

2014-09-13 00:15:02

1.atoi函数的原型
 int atoi(const char *nptr);
2.GNU官方解释
The atoi() function converts the initial portion of the string  pointed to by nptr to int. 
3.注意要点:
(1)实现把输入的字符串转换成对应的整数。
(2)应该考虑到以负号、正号、空格和TAB键开头的情况
(3)假如第一个字符是(2)中的四种情况,则应该跳过这个字符,从第二个字符开始比较
(3)除了(3)的情况之外,若第一个字符就是0--9中的字符,则进行转换,直到遇到不是0--9之间的字符为止。
(4)除了(3)的情况之外,若第一个字符不是0--9中的字符,则不进行转换,直接返回0

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <assert.h>

  4. int my_atoi(const char *s)
  5. {
  6.     int num = 0;
  7.     int signal = 1;
  8.     
  9.     //一般对输入参数是指针的情况都要做参数的有效性检查,断言比较直观方便,推荐使用
  10.     assert(s != NULL);
  11.     
  12.     //对于以加号、减号、空格和TAB键开头的字符,需要直接跳过,从下一个字符开始检查
  13.     if(*s == '-')
  14.     {
  15.         s++;
  16.         signal = -1; //不能忽略以负号开头的字符串
  17.     }
  18.     if(*s == '+')
  19.     {
  20.         s++;
  21.         signal = 1; //不能忽略以正号开头的字符串
  22.     }
  23.     if((*s == ' ') || (*s == '    '))
  24.     {
  25.         s++;
  26.     }

  27.     //只处理0--9之间的字符串,这样转化为整数才有意义
  28.     if(!(*s >= '0' && *s <= '9'))
  29.     {
  30.         return 0;
  31.     }
  32.     
  33.     while(*s != '\0')
  34.     {
  35.         if(*s >= '0' && *s <= '9')
  36.         {
  37.             //把字符串转换成整数
  38.             num = num * 10 + (*s - '0');
  39.             s++;
  40.         }
  41.         else
  42.         {
  43.             s++;
  44.         }
  45.     }
  46.     
  47.     return signal * num;
  48. }

  49. int main(int argc,char agrv[])
  50. {
  51.     char buf[20];
  52.     char *s = NULL;
  53.     int num = 0;

  54.     printf("Please input a string within '0' - '9'\n");
  55.     scanf("%s",buf);

  56.     printf("%s\n",buf);

  57.     num = my_atoi(buf);
  58.     //num = atoi(buf); //使用这个函数,测试我们的功能是否和系统提供的完全相同
  59.     
  60.     printf("buf = %s,my_atoi(buf) = %d\n",buf,num);

  61.     return 0;
  62. }
运行结果如下:

点击(此处)折叠或打开

  1. ubuntu@ubuntu:~$ gcc my_atoi1.c
  2. ubuntu@ubuntu:~$ ./a.out
  3. Please input a string within '0' - '9'
  4. 123jakf
  5. 123jakf
  6. buf = 123jakf,my_atoi(buf) = 123
  7. ubuntu@ubuntu:~$ ./a.out
  8. Please input a string within '0' - '9'
  9. -123ksfja
  10. -123ksfja
  11. buf = -123ksfja,my_atoi(buf) = -123
  12. ubuntu@ubuntu:~$ ./a.out
  13. Please input a string within '0' - '9'
  14. fjsakjfks123
  15. fjsakjfks123
  16. buf = fjsakjfks123,my_atoi(buf) = 0
  17. ubuntu@ubuntu:~$ ./a.out
  18. Please input a string within '0' - '9'
  19.  123
  20. 123
  21. buf = 123,my_atoi(buf) = 123
  22. ubuntu@ubuntu:~$ ./a.out
  23. Please input a string within '0' - '9'
  24.     123jskfj
  25. 123jskfj
  26. buf = 123jskfj,my_atoi(buf) = 123
总结:以上只是一种转换,其实库函数中还提供了很多可以转换为不同类型的函数:具体如下:
atof(将字符串转换成浮点型数)
atoi(将字符串转换成整型数)   
atol(将字符串转换成长整数数)                         
strtod(将字符串转换成浮点数) 
strtol(将字符串转换成长整型数)  
strtoul(将字符串转换成无符号长整型数)  
toascii(将整型数转换成合法的ASCII 码字符) 
toupper(将小写字母转换成大写字母) 
tolower(将大写字母转换成小写字母)
阅读(837) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~