• atoi 和 itoa是面试笔试经常要考到的题目,下面两份代码是用C语言实现的atoi和itoa:


    atoi 和 itoa的实现

    2012-08-25 14:57 by CobbLiu, 167 阅读, 0 评论, 收藏编辑

    atoi 和 itoa是面试笔试经常要考到的题目,下面两份代码是用C语言实现的atoi和itoa:

    1, atoi

    原型: int atoi(const char *nptr);

    函数说明: 参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。

    复制代码
    #include <stdio.h>
    #include <assert.h>
    static int atoi(const char* str)
    {
        int result = 0;
        int sign = 0;
        assert(str != NULL);
        // proc whitespace characters
        while (*str==' ' || *str=='\t' || *str=='\n')
            ++str;
    
        // proc sign character
        if (*str=='-')
        {
            sign = 1;
            ++str;
        }
        else if (*str=='+')
        {
            ++str;
        }
    
        // proc numbers
        while (*str>='0' && *str<='9')
        {
            result = result*10 + *str - '0';
            ++str;
        }
    
        // return result
        if (sign==1)
           return -result;
        else
           return result;
    } 
    复制代码

    2. itoa

    char *itoaint value, char *string,int radix);

      原型说明:

      value欲转换的数据。

      string:目标字符串的地址。

      radix:转换后的进制数,可以是10进制、16进制等

    复制代码
    char *itoa(int val, char *buf, unsigned radix)
    {
        char   *p;             
        char   *firstdig;      
        char   temp;           
        unsigned   digval;     
        p = buf;
        if(val <0)
        {
            *p++ = '-';
            val = (unsigned long)(-(long)val);
        }
        firstdig = p; 
        do{
            digval = (unsigned)(val % radix);
            val /= radix;
           
            if  (digval > 9)
                *p++ = (char)(digval - 10 + 'a'); 
            else
                *p++ = (char)(digval + '0');      
        }while(val > 0);
       
        *p-- = '\0 ';         
        do{
            temp = *p;
            *p = *firstdig;
            *firstdig = temp;
            --p;
            ++firstdig;        
        }while(firstdig < p);  
        return buf;
    }

    http://www.cnblogs.com/cobbliu/archive/2012/08/25/2656176.html
  • 相关阅读:
    mysql数据库操作
    django
    django-rest framwork
    Maven项目POM文件错误,提示“Plugin execution not covered by lifecycle configuration”的解决方案
    [Flutter] FFI之生成Ansi字符串指针
    多label实现准确率和召回率
    pickle.dump()和pickle.load()
    numpy.take()
    通俗易懂的lambda表达式,不懂来找我!
    collections(python常用内建模块)
  • 原文地址:https://www.cnblogs.com/qq378829867/p/2972937.html
Copyright © 2020-2023  润新知