atoi和itoa的编程实现

来源:互联网 发布:魅蓝note6网络频段 编辑:程序博客网 时间:2024/05/21 14:07

前言

前几天博主在新浪微薄上看到耗子叔叔考察了atoi的编写,周四博主也要面试阿里(ps:虽然博主LNMP方向,但是还是有信心拼一把),这里也自己实现一下这两个函数,防止面试问到答不出来

atoi

#include <stdio.h>#include <stdlib.h>#define INT_MAX  2147483647#define INT_MIN  -2147483648int myatoi(const char *s){int val, flag;unsigned int cutlim, cutoff;// 判断是否为空if (s == NULL)return 0;// 去除空格和制表符while (*s == ' ' || *s == '\t')s ++;// 判断符号if (*s == '-') {flag = 1;s ++;} else {flag = 0;if (*s == '+')s ++;}// 注意越界cutoff = flag ? (unsigned int) INT_MAX + 1 : INT_MAX;cutlim = cutoff % 10;cutoff /= 10;for (val = 0; *s >= '0' && *s <= '9'; s ++) {if (val > cutoff || (val == cutoff && *s - '0' > cutlim)) {return flag ? INT_MIN : INT_MAX;}val = 10 * val + *s - '0';}if (flag)return val * -1;elsereturn val;}int main(void){char str[100];int num;while (scanf("%s", str) != EOF) {num = myatoi(str);printf("%d\n", num);}return 0;}

itoa

#include <stdio.h>#include <stdlib.h>#define N 15/** * 异或交换两个数 */void swap(char *a, char *b){if (*a != *b) {*a = *a ^ *b;*b = *a ^ *b;*a = *a ^ *b;}}/** * 编程实现windows平台整型转字符串代码 */void itoa(int value, char *str){int i, j, k;// 处理负数if (value < 0) {str[0] = '-';value *= -1;} else {str[0] = '+';}for (i = 1; value; i ++, value /= 10) {str[i] = value % 10 + '0';}// 字符串逆序for (j = 1, k = i - 1; j <= k; j ++, k --) {swap(str + j, str + k);}// 补字符串结束标识str[i] = '\0';// 正数前移一位if (str[0] != '-') {for (j = 1; j <= i; j ++) {str[j - 1] = str[j];}}}int main(void){int value;char str[N];while (scanf("%d", &value) != EOF) {itoa(value, str);printf("%s\n", str);}return 0;}


原创粉丝点击