我有一段Python代码,内容如下:
template = \
"""
%2s %2s %2s
%2s R %2s
%2s %2s %2s
%2s %2s %2s %2s %2s %2s %2s %2s %2s %2s %2s %2s
%2s B %2s %2s W %2s %2s G %2s %2s Y %2s
%2s %2s %2s %2s %2s %2s %2s %2s %2s %2s %2s %2s
%2s %2s %2s
%2s O %2s
%2s %2s %2s
"""
print template % tuple(range(1, 49))
我正在尝试将上面的代码转换为C(是的,我刚刚开始学习,这可能是非常不言而喻的)而且,对于我的生活,找不到任何可以帮助我的文档。
我已经尝试过使用Cython,但最终得到的是一些可笑的长代码,对我来说,在我的程序中实现起来并不实用。我也搜索了Stackoverflow很长一段时间,但无济于事。如果我错过了什么,请给我一个链接。
答案 0 :(得分:1)
我想不出一种可移植的方式来生成参数列表,所以我想不出任何简单的解决方案比输入像printf这样的整个列表更好(模板,1,2,3,4,5,6, ......,49)。
另一个解决方案是手动浏览模板并执行以下操作:
#include <stdio.h>
#include <string.h>
void print_template_with_range(char *template, int start, int end) {
int i = 1;
char *str = strdup(template);
char *cur = str;
char *pos;
while ((pos = strstr(cur, "%2s")) != NULL) {
*pos = '\0';
printf("%s", cur);
printf("%2d", i++);
cur = pos + 3;
}
printf("%s", cur);
free(str);
}
int main() {
char* format_string = "\n\
%2s %2s %2s\n\
\n\
%2s R %2s\n\
\n\
%2s %2s %2s\n\
\n\
%2s %2s %2s %2s %2s %2s %2s %2s %2s %2s %2s %2s\n\
\n\
%2s B %2s %2s W %2s %2s G %2s %2s Y %2s\n\
\n\
%2s %2s %2s %2s %2s %2s %2s %2s %2s %2s %2s %2s\n\
\n\
%2s %2s %2s\n\
\n\
%2s O %2s\n\
\n\
%2s %2s %2s\n\
";
print_template_with_range(format_string, 1, 49);
return 0;
}
产地:
1 2 3
4 R 5
6 7 8
9 10 11 12 13 14 15 16 17 18 19 20
21 B 22 23 W 24 25 G 26 27 Y 28
29 30 31 32 33 34 35 36 37 38 39 40
41 42 43
44 O 45
46 47 48
答案 1 :(得分:0)
在Python中,你可以将一个集合抛出一个字符串,然后就会发生魔法。这是高级语言的乐趣。
C不是快乐或高级语言。
您将不得不使用要打印的数据创建一个数组,然后遍历printf和/或调用以发出所需的输出(逐行,char-by-char,或混合)。
做一些类似于你上面所做的事情:
char* format_string = " \
%2s %2s %2s \
\
%2s R %2s \
\
%2s %2s %2s \
\
%2s %2s %2s %2s %2s %2s %2s %2s %2s %2s %2s %2s \
\
%2s B %2s %2s W %2s %2s G %2s %2s Y %2s \
\
%2s %2s %2s %2s %2s %2s %2s %2s %2s %2s %2s %2s \
\
%2s %2s %2s \
\
%2s O %2s \
\
%2s %2s %2s \
";
printf(format_string, t[0], t[1], ...);