首页 > 解决方案 > 消除前导零,同时仍保持正确对齐

问题描述

我希望能够从输出中删除数字 0-9 的前导零,但同时仍然保持如果数字有 2 位我将拥有的对齐方式。
假设我有一个 dms 格式的经度:1134510W

我想添加另一个坐标,比如: 1450309N
我如何让它符合格式:

113d 45m 10d West  
145d  3m  9d North

fscanf(buf, "%3s%2s%2s%s",d,m,s,c)用来阅读和
sprintf(buf, "%3sd %2sm %2ss %4s",d,m,s,c)存储它。我尝试将sprintfm 和 s 宽度说明符更改为 1,但它没有正确对齐。

标签: cprintf

解决方案


这个怎么样?

#include <stdio.h>

char* trim(char* c)
{
    while (*c=='0') c++;
    return c;
}

int main(void) {
    char* d="113";
    char* m="45";
    char* s="10";
    char* c= "West";
    printf("%3sd %2sm %2ss %4s\n",d,m,s,c);

    d="145";
    m="03";
    s="09";
    c= "North";
    printf("%3sd %2sm %2ss %4s",trim(d),trim(m),trim(s),c);
    return 0;
}

不带trim函数的输出:

Success #stdin #stdout 0s 9424KB
113d 45m 10s West
145d 03m 09s North

输出trim函数:

Success #stdin #stdout 0s 9424KB
113d 45m 10s West
145d  3m  9s North

推荐阅读