C语言基础-itoa和atoi函数的使用和自己实现

序言

整型数转字符,或者字符转整型数是编程中比较常见的类型转换。

itoa()函数和atoi()函数并非标准C库函数,大多数编译器的stdlib.h库中包含,如果没有的话需要自己实现。


1. itoa()

  • 函数原型:char *itoa(int value, char *string, int radix);

    • value:要转换的整型数
    • string:存储字符串的数组地址
    • radix:进制。2~36进制
  • 功能及返回值

    • 将一整型数转换为字符串
    • 返回指向string的指针
  • 应用举例

//实现2048的2-36进制输出

#include <stdio.h>
#include <stdlib.h>
int main (void)
{
    int num = 2048;
    char str[12];                   //转换为二进制最多也才11位数字,然后转换为字符
    int i;
    for (i = 2; i <= 36; i++)
    {
        itoa(num, str, i);
        printf("%s\n", str);
    }
    return 0;
}
  • 函数自己实现

    • 如果库函数中不自带该函数,需要自己实现
/* 整型数转任意进制字符串 */

#include <stdio.h>

char *itoa(int value, char *string, int radix)
{
    //原来的整型数可能是任意进制,如果只是十进制等就不需要定义该数组
    char reserve[37] = "0123456789abcdefghijklmnopqrstuvwxyz";
    char temp[100] = {0};

    //错误检测
    if (radix < 2 || radix > 36)
    {
        printf("error value\n");
        return string;
    }

    //符号判断
    int i, j, sign;               //字符串计数
    if ((sign = value) < 0)       //负数也处理
        value = -value;           //转换为正数

    //开始转换
    i = 0;
    while (value > 0)
    {
        temp[i++] = reserve[value%radix];
        //temp[i++] = value%radix - '0';    //不行
        value = value / radix;
    }

    //符号位
    if (sign < 0)
    {
        temp[i] = '-';
        j = i;
    }
    else
        j = i - 1;

    //逆向输出
    for (; j >= 0; j--)
    {
        *string++ = temp[j];
    }
    *string = '\0';            //字符串结束符
    return string;
}


int main (void)
{
    int num = -2048;
    char str[100];                   //转换为二进制最多也才11位数字,然后转换为字符
    int i;
    for (i = 2; i <= 36; i++)
    {
        itoa(num, str, i);
        printf("%s\n", str);
    }
    return 0;
}


2. atoi()

  • 函数原型:int atoi(const char *str);

  • 功能:将字符串转换为整型数输出

  • 头文件:stdlib.h

  • 返回值

    • 成功:返回整型数
    • 失败:比如无法转换为int类型的值,返回0(所以无法区分转换失败还是转换本身就是0)
  • 应用举例

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char str1[] = "123";
    char str2[] = "-100";
    printf("%d", atoi(str1) + atoi(str2));
    return 0;
}
  • 函数自己实现

    • 如果库函数中不自带该函数,需要自己实现
#include <stdio.h>
#include <ctype.h>      //for isspace() or isdigit()

int isspace(int c)
{
    if (c == ' ' || c == '\r' || c == '\t')
        return 1;
    else
        return 0;
}

int atoi(char *string)
{
    int integer_sign = 1;
    int integer = 0;

    if (string == NULL)
        return 0;

    //判断是否为空格/回车符/制表符
    if (isspace(*string))
        string++;

    //判断正负号
    if (*string == '-' || *string == '+')
    {
        if (*string == '-')
            integer_sign = -1;
        string++;
    }

    //数字字符转换成数字:可添加字母字符的转换
    //while (*string >= '0' && *string <= '9')
    while (isdigit(*string))
    {
        integer = integer * 10 + (*string - '0');
        string++;
    }
    return integer_sign*integer;
}


int main()
{
    char str1[] = "-123";
    char str2[] = "a";
    printf("%d", atoi(str1) + atoi(str2));
    return 0;
}



Acknowledgements:
http://blog.csdn.net/lanzhihui_10086/article/details/39960027
http://www.cnblogs.com/dudu580231/p/4821954.html

2017.09.02

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值