【发布时间】:2019-05-20 06:52:44
【问题描述】:
我想根据真假向量对数组进行二次采样:
array1 - ughIuytLikeretC
array2 - ffftfffttttffft
这样array1 && array2 产生:
array3 - ILikeC
我做了什么:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main() {
char source[16] = "ughIuytLikeretC\0";
bool mask[15] = {
false, false, false, true, false,
false, false, true, true, true,
true, false, false, false, true,
};
char *filtered;
filtered = malloc(16 * sizeof(char));
int j = 0;
int i;
for (i = 0; i < 15; i++) {
if (mask[i]) {
filtered[j] = source[i];
j += 1;
}
}
filtered[j] = 0;
printf("%s\n", filtered);
free(filtered);
}
我的问题是:
这是一种可行的方法还是有一种更时尚的方法来实现这一目标?
【问题讨论】:
-
你忘了初始化
j。 -
也不要忘记用
'\0'字符终止array3。 -
另请注意
array1需要至少 16 的大小才能容纳"ughIuytLikeretC"。 -
这是解决问题的好方法吗? - 是的。有没有办法使用按位与来改进代码? ——不,不是我看到的。你所有的数据都以字节大小或更大的单位排列,所以我真的看不出有理由考虑按位运算。
-
"ughIuytLikeretC\0" 需要 17 个字符;最后你有两个空值 - 一个是编译器放在那里的,一个是显式的。 Safet 将
[]留空,编译器将为初始化程序提供正确的长度。