自定义C语言变量转换库

发布于:2025-03-31 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、代码库如下

(一)字符串转int整数

// 把数字字符串转成整数
// 返回整数结果 
int parseInt(char msg[]){
    int offset = 0;
    int total = 0;
    
    // 默认是正数 
    int isPositive = 1;
    
    // 第一个是符号,如果是+代表整数 
    if(msg[0] == '+'){
        offset++;
    } else if (msg[0] == '-'){
        isPositive = 0;
        offset++;
    }
    
    int k;
    
    // 如果存在小数点 
    int isExistPoint = 0;
    for(k = 0; msg[k] != '\0'; k++){
        if(msg[k] == '.'){
            isExistPoint = 1;
            break;
        }
    }
    
    // 如果存在小数点,返回0 
    if(isExistPoint){
        return 0;
    }
    
    // 进行求值 
    for(k = offset; msg[k] != '\0'; k++){
        total = (msg[k] - 48) + total * 10; 
    }
    
    // 如果是负数,乘以-1 
    if(!isPositive){
        total = total * (-1);
    }
    
    return total;
}

 (二)字符串转long类型的整数
 

// 把数字字符串转成整数
// 返回整数结果 
long parseLong(char msg[]){
    int offset = 0;
    long total = 0L;
    
    // 默认是正数 
    int isPositive = 1;
    
    // 第一个是符号,如果是+代表整数 
    if(msg[0] == '+'){
        offset++;
    } else if (msg[0] == '-'){
        isPositive = 0;
        offset++;
    }
    
    int k;
    
    // 如果存在小数点 
    int isExistPoint = 0;
    for(k = 0; msg[k] != '\0'; k++){
        if(msg[k] == '.'){
            isExistPoint = 1;
            break;
        }
    }
    
    // 如果存在小数点,返回0 
    if(isExistPoint){
        return 0;
    }
    
    // 进行求值 
    for(k = offset; msg[k] != '\0'; k++){
        total = (msg[k] - 48) + total * 10L; 
    }
    
    // 如果是负数,乘以-1 
    if(!isPositive){
        total = total * (-1);
    }
    
    return total;
}

// 把数字字符串转成无符号的长整数
// 返回整数结果 
long parseUnsignedLong(char msg[]){
    int offset = 0;
    unsigned long total = 0L;
    
    int k;
    
    // 进行求值 
    for(k = offset; msg[k] != '\0'; k++){
        total = (msg[k] - 48) + total * 10L; 
    }
    
    return total;
}
 

 (三)字符串转double类型的数

// 把浮点数字字符串转成浮点数
// 返回整数结果 
double parseDouble(char msg[]){
    
    int offset = 0;
    
    double total = 0;
    
    // 默认是正数 
    int isPositive = 1;
    
    // 第一个是符号,如果是+代表整数 
    if(msg[0] == '+'){
        offset++;
    } else if (msg[0] == '-'){
        isPositive = 0;
        offset++;
    }
    
    int k;
    
    // 记录小数点位置
    int pointIndex = -1; 
    
    // 如果存在小数点 
    int isExistPoint = 0;
    for(k = 0; msg[k] != '\0'; k++){
        if(msg[k] == '.'){
            isExistPoint = 1;
            pointIndex = k;
            break;
        }
    }
    
    // 如果存在小数点,计算整数 
    if(isExistPoint){
        int h = 0;
        
        // 进行整数求值 
        for(h = offset; h < pointIndex; h++){
            total = (msg[h] - 48) + total * 10.0; 
        }
        
        // 进行小数部分求值
        double unit = 1.0;
        for(h = pointIndex + 1; msg[h] != '\0'; h++){
            // 更新单位
            unit = unit * 0.1; 
            total = total + (msg[h] - 48) * unit; 
        }
    } else{
        // 不存在小数点,全部算作整数
        int n = 0; 
        for(n = offset; msg[n] != '\0'; n++){
            total = (msg[n] - 48) + total * 10.0; 
        }
    }

    // 如果是负数,乘以-1 
    if(!isPositive){
        total = total * (-1);
    }
    
    return total;
}
 

二、使用案例

#include<stdio.h>


int main(){
    
    printf("把-55转成整数:%d", parseInt("-55"));

    printf("把1155转成整数:%d", parseInt("1155"));

    printf("把-1999888777转成整数:%ld", parseLong("-1999888777"));
    printf("把44441225转成无符号整数:%ld", parseUnsignedLong("44441225"));

    printf("把-5525.0转成浮点数:%lf", parseDouble("-5525.0"));
    printf("把3.14156转成浮点数:%lf", parseDouble("3.14156"));


    return 0;
}