面试题目:c语言的数字字符串转换为整数

川长思鸟来 2023-02-10 03:34 91阅读 0赞
  1. //题目:c语言的数字字符串转换为整数
  2. #include<stdio.h>
  3. #define INT_MAX 0x7FFFFFFF
  4. #define INT_MIN (-0x7FFFFFFF-1)
  5. /*
  6. 约束:
  7. 0. 参数中const变量指针使用;
  8. 1. 空指针处理;
  9. 2. 字符串前面空格处理;
  10. 3. 字符串正负号处理;
  11. 4. 字符前面 0 字符的处理;
  12. 5. 错误字符输入处理
  13. 6. 最大正数和最大负数溢出处理;
  14. */
  15. /*将字符串转化为整数*/
  16. int my_atoi(const char *buf) //0. 参数中const变量指针使用;
  17. {
  18. __int64 tmp_data = 0;
  19. char i=0;
  20. signed char sign = 1;
  21. printf("输入字符串为:%s\r\n", buf);
  22. /*1. 空指针,返回*/
  23. if(NULL == buf)
  24. {
  25. printf("错误提示err:空指针\r\n");
  26. return 0;
  27. }
  28. /*2. 跳过字符串前面空格*/
  29. while(' ' == *buf)
  30. {
  31. buf++;
  32. }
  33. /*3.字符串正负号,负号显示,正号不显示*/
  34. if('-' == *buf) //负数
  35. {
  36. buf++;
  37. sign = -1;
  38. }
  39. else if('+' == *buf) //带符号的正数
  40. {
  41. buf++;
  42. sign = 1;
  43. }
  44. else //没带符号的正数
  45. {
  46. sign = 1;
  47. }
  48. /*4. 跳过字符前面 0 字符*/
  49. while('0' == *buf)
  50. {
  51. buf++;
  52. }
  53. /*开始遍历字符串*/
  54. while('\0' != *buf)
  55. {
  56. if(*buf >= '0' && *buf <= '9')
  57. {
  58. tmp_data *= 10;
  59. tmp_data += *(buf++)-'0'; //tmp_data = tmp_data*10+(buf[i++]-'0'); 表示方法2.
  60. }
  61. else
  62. {
  63. /*5. 非法数据,返回0,不处理这包数据*/
  64. printf("错误提示err:非法输入\r\n");
  65. return 0;
  66. }
  67. }
  68. tmp_data *= sign;
  69. /*6. 限制最大正数和最大负数溢出*/
  70. if((1 == sign) && (tmp_data > INT_MAX)) //0x7FFFFFFF
  71. {
  72. printf("错误提示err:正数溢出(需小于2147483647)\r\n");
  73. return 0;
  74. }
  75. if((-1 == sign) && (tmp_data < (int)-2147483648)) //if((-1 == sign) && (tmp_data < INT_MAX)
  76. {
  77. printf("错误提示err:负数溢出(需大于-2147483648)\r\n");
  78. return 0;
  79. }
  80. return tmp_data;
  81. }
  82. /*主函数*/
  83. void main(void)
  84. {
  85. printf("字符串转整数:\r\n");
  86. printf("data: %d\r\n",my_atoi(" 1234"));
  87. printf("data: %d\r\n",my_atoi(NULL));
  88. printf("data: %d\r\n",my_atoi(" +1234"));
  89. printf("data: %d\r\n",my_atoi(" -4568"));
  90. printf("data: %d\r\n",my_atoi(" 2147483647"));
  91. printf("data: %d\r\n",my_atoi(" -2147483648"));
  92. printf("data: %d\r\n",my_atoi(" 2147483648"));
  93. printf("data: %d\r\n",my_atoi(" -2147483649"));
  94. }

写的好的博客:

https://wizardforcel.gitbooks.io/the-art-of-programming-by-july/content/01.03.html

http://wuchong.me/blog/2014/03/17/string-to-int/

发表评论

表情:
评论列表 (有 0 条评论,91人围观)

还没有评论,来说两句吧...

相关阅读