【发布时间】:2011-05-11 21:09:58
【问题描述】:
我想映射结构成员,这样我就可以消除循环中的 if 分支。在 C 中实现这一点的最佳方式或约定是什么?我想它可能是一个二维数组...然后我可以将整数映射到字符键?
char chunk[32];
int n;
int i;
char *ptr = config;
while (*ptr != '\0') {
int items_read = sscanf(ptr, "%31[^;]%n", chunk, &n);
if(chunk[0] == 'S' && chunk[1] == 'P') {
for(i=0;i<GLOBAL_MEAS_CUTOFF; i++) {
theMeas[i].signal_path = atoi(&chunk[2]);
}
}
if(chunk[0] == 'T' && chunk[1] == 'L') {
for(i=0;i<GLOBAL_MEAS_CUTOFF; i++) {
theMeas[i].trace_length = atoi(&chunk[2]);
}
}
if(chunk[0] == 'S' && chunk[1] == 'R') {
for(i=0;i<GLOBAL_MEAS_CUTOFF; i++) {
theMeas[i].sample_rate = atoi(&chunk[2]);
}
}
chunk[0]='\0';
if (items_read == 1)
ptr += n;
if ( *ptr != ';' ) {
break;
}
++ptr;
}
【问题讨论】:
-
你想要像 Python 这样的字典,还是想要更简单的方法来访问
struct中的命名数据?一个比另一个难。 -
我想删除 if 分支。所以我可以在循环中有一个语句,其中块映射到结构成员。在像 python 这样的动态语言中,我可以做 theMeas[i][chunk] = chunk[2].
-
chunk看起来你不能“只”做theMeas[i][chunk](即使在 Python 中)。您将前两个字符作为您想要的成员的首字母缩写词。您只能在查找中使用chunk[0]和chunk[1]。 -
@Chris 是的,我意识到这一点,我很马虎,所以你明白了基本的想法。我想没有简单的方法可以做到这一点。
标签: c struct hashmap hashtable