美文网首页
【tip】C语言整数和字符串互转实现

【tip】C语言整数和字符串互转实现

作者: papi_k的小茅屋 | 来源:发表于2024-01-10 22:44 被阅读0次
    // 整数转字符串
    char *itoa(int num, char *str, int radix)
    {
        char index[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //索引表
        unsigned unum;
        int i = 0;
    
        // 获取要转换的整数的绝对值
        if (radix == 10 && num < 0) {
            unum = (unsigned)-num;
            str[i++] = '-';
        } else {
            unum = (unsigned)num;
        }
    
        // 转换部分,注意转换后是逆序的
        do {
            str[i++] = index[unum % radix]; //取unum的最后一位,并设置为str对应位,指示索引加1
            unum /= radix; //unum去掉最后一位
        } while (unum)
    
        str[i] = '\0'; //在字符串最后添加'\0'字符,c语言字符串以'\0'结束
    
        int k; // k用来指示调整顺序的开始位置;
        int j; // j用来指示调整顺序时的交换;
        //将顺序调整过来
        if (str[0] == '-') { //如果是负数,符号不用调整,从符号后面开始调整
            k = 1;
        } else { //不是负数,全部都要调整
            k = 0;
        }
    
        char temp; //临时变量,交换两个值时用到
        for (j = k; j <= (i - 1) / 2; j++) { //头尾一一对称交换,i其实就是字符串的长度,索引最大值比长度少1
            temp = str[j]; //头部赋值给临时变量
            str[j] = str[i - 1 + k - j]; //尾部赋值给头部
            str[i - 1 + k - j] = temp;
        }
        return str;
    }
    
    
    // 字符串转整数
    long atol(const char *nptr)
    {
        int c; /* 当前要转换的字符(一个一个字符转换成数字) */
        long total; /* 当前转换结果 */
        int sign; /* 标志转换结果是否带负号*/
    
        /*跳过空格,空格不进行转换*/
        while (isspace(int)(unsigned char)*nptr) { // C 库函数 int isspace(int c) 检查所传的字符是否是空白字符
            ++nptr;
        }
    
        int c = (int)(unsigned char)*nptr++; //获取一个字符准备转换
        sign = c;
        if (c == '-' || c == '+') {
            c = (int)(unsigned char)*nptr++;
        }
    
        total = 0; //设置转换结果为0
        while (isdigit(c)) { // C 库函数 int isdigit(int c) 检查所传的字符是否是十进制数字字符。十进制数字是:0 1 2 3 4 5 6 7 8 9
            total = 10 * total + (c - '0'); /* 根据ASCII码将字符转换为对应的数字,并且乘10累积到结果 */
            c = (int)(unsigned char)*nptr++; /* 取下一个字符 */
        }
    
        // 根据符号指示返回是否带负号的结果
        if (sign == '-') {
            return -total;
        } else {
            return total;
        }
    }
    

    yo peace!

    相关文章

      网友评论

          本文标题:【tip】C语言整数和字符串互转实现

          本文链接:https://www.haomeiwen.com/subject/eepzndtx.html