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

本文介绍了一个巧妙的C语言技巧,通过利用字符指针偏移和条件运算符,实现在输出数组元素时不带头部逗号。此方法避免了复杂的if条件判断,使代码更简洁高效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

头尾部都没有’,'符号,用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值