Chinaunix首页 | 论坛 | 博客
  • 博客访问: 136157
  • 博文数量: 38
  • 博客积分: 306
  • 博客等级: 二等列兵
  • 技术积分: 335
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-29 15:19
文章分类

全部博文(38)

文章存档

2013年(23)

2012年(15)

我的朋友

分类: C/C++

2013-07-06 17:22:28

int atoi (char *s);
跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。
char* itoa(int value, char* string, int radix);
将整数value转换成字符串存入string, radix为转换时所用基数(保存到字符串中的数据的进制基数 2 8 10 16).

注意:
上述函数不是标准的C函数,它是windows特有的。若跨平台使用,则要使用sprintf。

函数具体实现使用示例:

点击(此处)折叠或打开

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

  4. int atoi (char s[]);
  5. char* itoa(int value, char* string, int radix);

  6. int main(void )
  7. {
  8.     int n;
  9.     char *str = "12345.67";
  10.     n = atoi(str);
  11.     printf("string = %s integer = %d\n", str, n);
  12.   
  13.     char a[] = "-100" ;
  14.     char b[] = "123" ;
  15.     int c = atoi( a ) + atoi( b ) ;
  16.     printf("%d\n",atoi( a ));
  17.     printf("c = %d\n", c) ;
  18.     return 0;
  19. }

  20. int atoi (char s[])
  21. {
  22. int i,n,sign;
  23. for(i=0;isspace(s[i]);i++)//跳过前面的空格字符
  24.        ;
  25. sign=(s[i]=='-')?-1:1;
  26. if(s[i]=='+'||s[i]=='-')//跳过符号
  27.        i++;
  28. for(n=0;isdigit(s[i]);i++)//遇上数字或正负符号才开始做转换,遇到非数字或字符串结束时('\0')才结束转换
  29.        n=10*n+(s[i]-'0');//将数字字符转换成整形数字
  30. return sign*n;
  31. }

  32. char* itoa(int value, char* string, int radix)
  33. {
  34.     char tmp[33];
  35.     char* tp = tmp;
  36.     int i;
  37.     unsigned v;
  38.     int sign;
  39.     char* sp;
  40.     if (radix > 36 || radix <= 1)
  41.     {
  42.         //__set_errno(EDOM);
  43.         return 0;
  44.     }
  45.     sign = (radix == 10 && value < 0); // 看是否是负数。保留符号位。
  46.     if (sign)
  47.         v = -value;
  48.     else
  49.         v = (unsigned)value; /// 正数。所以可以直接转化为无符号数。
  50.     while (v || tp == tmp)
  51.     {
  52.         i = v % radix;
  53.         v = v / radix; // 最后一次转化后,v=0;
  54.         if (i < 10)
  55.             *tp++ = i + '0';
  56.         else
  57.             *tp++ = i + 'a' - 10; /// 十六进制的数。
  58.     }
  59.     if (string == 0)
  60.         string = (char*)malloc((tp-tmp)+sign+1);
  61.     sp = string;
  62.     if (sign)
  63.         *sp++ = '-';
  64.     while (tp > tmp)
  65.         *sp++ = *--tp; //生成的数字是逆序的,所以要逆序输出。
  66.     *sp = '\0';
  67.     return string;
  68. }
执行结果:



 



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