C语言—字符串转数字

作者:追风剑情 发布于:2019-11-14 19:51 分类:C

示例一:利用atoi()、atol()、atof()函数实现字符串转数字

  1. //Visual Studio中加上这句才可以使用scanf()
  2. //否则只能使用scanf_s()
  3. #define _CRT_SECURE_NO_WARNINGS
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <ctype.h>
  7. //atof()、atol()
  8. #include <stdlib.h>
  9.  
  10. //argc: 参数个数 argv[]: 参数数组
  11. //int main(int argc, char **argv)
  12. int main(int argc, char *argv[])
  13. {
  14. const char * n1 = "123";
  15. const char * n2 = "234abc";
  16. const char * n3 = "abc456";
  17.  
  18. //atoi()函数可以将字符串转成int
  19. printf("n1=%d\n", atoi(n1));
  20. printf("n2=%d\n", atoi(n2));
  21. printf("n3=%d\n", atoi(n3));
  22.  
  23. const char * n4 = "1.23";
  24. const char * n5 = "2.34abc";
  25. const char * n6 = "abc4.56";
  26.  
  27. //atof()函数可以将字符串转成double
  28. printf("n4=%lf\n", atof(n4));
  29. printf("n5=%lf\n", atof(n5));
  30. printf("n6=%lf\n", atof(n6));
  31.  
  32. const char * n7 = "123456789";
  33. const char * n8 = "234abc";
  34. const char * n9 = "abc456";
  35.  
  36. //atol()函数可以将字符串转成long
  37. printf("n7=%ld\n", atol(n7));
  38. printf("n8=%ld\n", atol(n8));
  39. printf("n9=%ld\n", atol(n9));
  40.  
  41. system("pause");
  42. return 0;
  43. }

运行测试
1111.png

示例二:更智能的函数strtol()、strtoul()、strtod()
strtol():将字符串转成long类型
strtoul():将字符串转成unsigned long类型
strtod():将字符串转成double类型
long strtol(const char * restrict nptr, char ** restrict endptr, int base)
nptr是指向待转换字符串的指针,endptr是一个指针的地址,该指针被设置为标识输入数字结束字符的地址,base表示以什么进制写入数字。

  1. //Visual Studio中加上这句才可以使用scanf()
  2. //否则只能使用scanf_s()
  3. #define _CRT_SECURE_NO_WARNINGS
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <ctype.h>
  7. //atof()、atol()
  8. #include <stdlib.h>
  9.  
  10. #define LIM 30
  11. char * s_gets(char * st, int n);
  12.  
  13. //argc: 参数个数 argv[]: 参数数组
  14. //int main(int argc, char **argv)
  15. int main(int argc, char *argv[])
  16. {
  17. char number[LIM];
  18. char * end;
  19. long value;
  20.  
  21. puts("Enter a number (empty line to quit):");
  22. while (s_gets(number, LIM) && number[0] != '\0')
  23. {
  24. value = strtol(number, &end, 10); //十进制
  25. printf("base 10 input, base 10 output: %ld, stopped at %s (%d)\n",
  26. value, end, *end);//end指向一个字符,*end为所指向字符的ASCII码
  27. value = strtol(number, &end, 16); //十六进制
  28. printf("base 16 input, base 10 output: %ld, stopped at %s (%d)\n",
  29. value, end, *end);
  30. puts("Next number:");
  31.  
  32. //strol()函数最多可以转换三十六进制,'a'-'z'字符都可以作为数字
  33. //strtoul()函数与strol()类似,strtoul()将字符串转成无符号值。
  34. //strtod()函数只以十进制转换
  35.  
  36. /*
  37. 许多实现使用itoa()和ftoa()函数分别把整数和浮点数转换成字符串。
  38. 但是这两个函数并不是C标准库的成员,可以用sprintf()函数代替它们,
  39. 因为sprintf()的兼容性更好。
  40. */
  41. }
  42. puts("Bye!\n");
  43.  
  44. system("pause");
  45. return 0;
  46. }
  47.  
  48. char * s_gets(char * st, int n)
  49. {
  50. char * ret_val;
  51. int i = 0;
  52. ret_val = fgets(st, n, stdin);
  53. if (ret_val) //即,ret_val != NULL
  54. {
  55. while (st[i] != '\n' && st[i] != '\0')
  56. i++;
  57. if (st[i] == '\n')
  58. st[i] = '\0';
  59. else
  60. while (getchar() != '\n')
  61. continue;
  62. }
  63. return ret_val;
  64. }

运行测试
1111.png

标签: C语言

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号