题目:编写程序实现字符串到整数的转换,如输入字符串“12345”,输出整数12345;即实现 atoi();
实现注意事项:此题考查的是考虑问题的全面性,在实现atoi()函数时应注意以下五点:
(1)指针为NULL;
(2)空字符串 ‘\0‘;
(3)+、- 号的处理;
(4)溢出问题;
(5)遇到异常字符怎么办;
#include <stdio.h> #include <assert.h> #include <ctype.h> #include <limits.h> enum RET { VALID,INVALID }; enum RET state = VALID; int my_atoi(const char* str) { assert(str); int flag = 1; long long ret = 0; if (str == NULL) //指针为NULL { return 0; } if (*str == ‘\0‘) //空字符串 { return 0; } while (isspace(*str))//空白字符处理 { str++; } if (*str == ‘-‘) //+ -号处理 { flag = -1; } if ((*str == ‘+‘) || (*str == ‘-‘)) { str++; } while (*str) { if ((*str >= ‘0‘) &&(*str <= ‘9‘)) { ret = ret * 10 + flag*(*str - ‘0‘); if ((ret>INT_MAX) || (ret < INT_MIN)) //处理溢出 { printf("数值越界\n"); return 0; } } else { state = INVALID; //处理异常字符 return ret; } str++; } return ret; } int main() { char arr[20]; scanf("%s", arr); int ret = my_atoi(arr); if (state == VALID) { printf("%d\n", ret); } else { printf("输入值非法\n"); printf("%d\n", ret); } system("pause"); return 0; }
本文出自 “magoYang” 博客,谢绝转载!
原文地址:http://10742272.blog.51cto.com/10732272/1769532