如何智能地在每个数字中间加一个逗号?

头尾部都没有’,'符号,用C语言实现。
我感觉用if感觉太复杂了,有没有更简单的?

例如:

输入:
a[6]={1,2,3,4,5,6}

输出:
1,2,3,4,5,6

下面是"谷雨同学"的回答,挺值得回味的:

#include <stdio.h>
int main(void) {
    int a[6] = {1, 2, 3, 4, 5, 6}, i;
    for (i = 0; i < 6; i++) {
        printf(",%d" + !i, a[i]);
    }
    return 0;
}

在这里插入图片描述

上面回答中,利用了字符指针的偏移。机智地去除了第一个,符号。

当i「等于」0时:

printf(",%d" + !i, a[i]);
=>
printf(",%d" + !0, a[0]);
=>
printf(",%d" + 1, a[0]);
=>
printf("%d", a[0]);

当i「不等于」0时:

printf(",%d" + !i, a[i]);
=>
printf(",%d" + !2, a[2]); // 这里以i = 2为例。
=>
printf(",%d" + 0, a[2]);
=>
printf(",%d", a[2]);

重点是 “,%d”+!i 这个表达式。",%d" 是一个字符串,它可以转换为指向其首元素的指针,然后就可以做加减法。
!i 这个式子只有当 i 为零的时候得 1,其余时候得 0。

当 i 为零的时候,printf 的第一个参数就变成 “,%d”+1。这里首先执行从字符串到指针的转换,然后再做指针的+1运算,相当于指针向后移了一位,即指向 “%d”(这里需要一点基础才能看懂)。

所以 ,当 i 为零的时候,执行的输出是 printf("%d",a[i]); 而 i 非零的时候,执行的输出是 printf(",%d",a[i]);。这就实现了题主的要求。

问题链接:
https://www.zhihu.com/question/412135686

"谷雨同学"回答链接:
https://www.zhihu.com/question/412135686/answer/1396323238

Vue实现给一个数字逗号可以使用Vue过滤器。 首先,在Vue组件的`filters`选项中注册一个名为`addComma`的过滤器函数。 ```javascript filters: { addComma: function(value) { // 将数字转换为字符串 var str = value.toString(); // 使用正则表达式将每三个数字一个逗号 return str.replace(/(\d)(?=(\d{3})+$)/g, '$1,'); } } ``` 然后,在模板中使用该过滤器函数对数字进行过滤。 ```html <template> <div> <!-- 使用过滤器对数字进行过滤 --> {{ number | addComma }} </div> </template> ``` 以上代码会将`number`变量中的数字逗号后显示在页面上。 请注意,在Vue中,过滤器函数的名称需要与模板中调用过滤器时的名称相匹配,在这个例子中就是`addComma`。 接下来,你可以将需要添逗号的三个数字通过`v-model`绑定到Vue组件的变量中,并在模板中使用过滤器函数对它们进行过滤。 ```html <template> <div> <input type="number" v-model="number1"> <input type="number" v-model="number2"> <input type="number" v-model="number3"> <!-- 使用过滤器对数字进行过滤 --> {{ number1 | addComma }}, {{ number2 | addComma }}, {{ number3 | addComma }} </div> </template> <script> export default { data() { return { number1: 1000, number2: 2000, number3: 3000 }; }, filters: { addComma: function(value) { var str = value.toString(); return str.replace(/(\d)(?=(\d{3})+$)/g, '$1,'); } } }; </script> ``` 以上代码会将输入的三个数字逗号后显示在页面上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值