C语言 将一个字符串中的浮点数全部变为整数

在压缩精简svg文件的路径时非常有用

//fumiama 20200802
//allFloat2Int.c
#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define INPUT argv[1]

int main(int argc, char **argv){
    
    
    int len = strlen(INPUT);
    int i = 0;
    while(i < len){
    
    
        if(isdigit(INPUT[i])) {
    
    
            float x = 0;
            sscanf(&INPUT[i], "%f", &x);
            printf("%d", (int)round(x));
            while((isdigit(INPUT[i]) || INPUT[i] == '.' ) && i < len) i++;
        }else putchar(INPUT[i++]);
    }
    putchar('\n');
}

编译好之后直接使用:

$./allFloat2Int "M896 864a32 32 0 0 1 0 64H128a32 32 0 0 1 0-64z m-60.16-733.621333l15.093333 15.093333c45.866667 45.834667 45.866667 120.16 0 166.005333L418.794667 743.338667a160.192 160.192 0 0 1-78.122667 42.986666l-152.245333 34.197334c-23.84 5.365333-44.661333-16.853333-37.749334-40.288l43.338667-146.88a160.042667 160.042667 0 0 1 40.373333-67.925334l435.328-435.050666c45.866667-45.834667 120.245333-45.834667 166.112 0zM636.32 254.304L279.68 610.709333a96.021333 96.021333 0 0 0-24.213333 40.746667l-27.946667 94.656 99.093333-22.261333a96.117333 96.117333 0 0 0 46.869334-25.781334L726.933333 344.842667l-90.602666-90.538667z m78.698667-78.656l-33.397334 33.386667 90.602667 90.538666 33.386667-33.376a53.333333 53.333333 0 0 0 0-75.456l-15.093334-15.093333a53.408 53.408 0 0 0-75.498666 0z"
M896 864a32 32 0 0 1 0 64H128a32 32 0 0 1 0-64z m-60-734l15 15c46 46 46 120 0 166L419 743a160 160 0 0 1-78 43l-152 34c-24 5-45-17-38-40l43-147a160 160 0 0 1 40-68l435-435c46-46 120-46 166 0zM636 254L280 611a96 96 0 0 0-24 41l-28 95 99-22a96 96 0 0 0 47-26L727 345l-91-91z m79-79l-33 33 91 91 33-33a53 53 0 0 0 0-75l-15-15a53 53 0 0 0-75 0z

大概能缩减50%的大小

猜你喜欢

转载自blog.csdn.net/u011570312/article/details/107744202