当前位置:编程学习 > C/C++ >>

atoi和itoa的编程实现

前言
前几天博主在新浪微薄上看到耗子叔叔考察了atoi的编写,周四博主也要面试阿里(ps:虽然博主LNMP方向,但是还是有信心拼一把),这里也自己实现一下这两个函数,防止面试问到答不出来
 
atoi
 
#include <stdio.h>  
#include <stdlib.h>  
  
#define INT_MAX  2147483647  
#define INT_MIN  -2147483648  
  
int 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;  
    else  
        return 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;  
}  

 

 
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,