Chinaunix首页 | 论坛 | 博客
  • 博客访问: 241845
  • 博文数量: 35
  • 博客积分: 791
  • 博客等级: 军士长
  • 技术积分: 510
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-05 16:56
文章分类
文章存档

2013年(7)

2012年(28)

我的朋友

分类: C/C++

2012-09-21 15:27:04

函数原型:int atoi(const char * str);

功能:将str里整数字符,翻成整数

函数说明:1:忽略开始的空白字符串,知道非空白的字符开始转换

2:处理正负+ - 字符

3:如果字符串为空,或者字符串里首字符不为数字或者正负号,不做转换

程序实现:



点击(此处)折叠或打开

  1. #include <stdlib.h>
  2. #include <assert.h>
  3. #include <stdio.h>
  4. int main(int argc,char *agrv[])
  5. {

  6.     char buf[100]="-33232";
  7.     printf("the buf is %d\n",atoi(buf));
  8.     return 0;
  9. }
  10. int atoi(const char *str)
  11. {

  12.     assert(str!=NULL);
  13.     int sign=0;
  14.     int num=0;
  15.     while(*str==' '||*str=='\n'&&*str=='\t')
  16.     str++;
  17.     if(*str=='-')
  18.     {
  19.         sign=-1;
  20.         str++;
  21.     }
  22.     else if(*str=='+')
  23.     {
  24.         sign=1;
  25.         str++;
  26.     
  27.     }
  28.     while(*str<='9'&&*str>='0')
  29.     {
  30.         
  31.         num=num*10+*str-'0';
  32.         str++;
  33.     
  34.     }
  35.     
  36.     return num*sign;
  37.         
  38.     
  39. }
以上例子是将十进制字符串转化为相应的整形量,可以再添加说明htoi函数的实现,将十六进制字符串转化为相应的整形量。程序如下:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. int main()
  3. int htoi(char s[]);
  4. {
  5.    int i;
  6.    char buf[100]="OX11";

  7.    i=htoi(s);
  8.    printf(“十六进制%s=%d ”,s,i);
  9.    
  10.    return 0;
  11. }

  12. int htoi(char s[])
  13. {
  14.    int i = 0;
  15.    int n = 0;
  16.    int digit = 0;

  17.    if(s[i]=='0')
  18.    {
  19.      ++i;
  20.      if(s[i] == 'X'&&s == 'x')
  21.      ++i;
  22.     }
  23.    else
  24.     {
  25.     printf("it is not true\n");
  26.     exit(-1);
  27.     }

  28.    for(i;s[i]!='0';i++)
  29.    {
  30.       
  31.       if(s[i]<'9'&&s[i]>'0')
  32.        digit = s[i]-'0';
  33.       else if(s[i]<'z'&&s[i]>'a')
  34.        digit=s[i]-'a'+10;
  35.       else if(s[i]>'A'&&s[i]<'z')
  36.         digit=s[i]-'A'+10;
  37.       else
  38.         break;
  39.      
  40.        n=n*16+digit;
  41. }
  42.        return n;
  43.        
  44. }


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