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