【问题标题】:C - AND operator between two arraysC - 两个数组之间的 AND 运算符
【发布时间】: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 将 [] 留空,编译器将为初始化程序提供正确的长度。

标签: c arrays substring


【解决方案1】:

要回答您的问题,这是一种可行的方法。

从算法的角度来看,这是一个可接受的解决方案,因为您需要构建一个额外的数组,而您正在这样做。

我忽略了 cmets 中指出的小警告。

注意:我会创建一个类似and_arrays(const char a[], const char b[], char result[]); 的函数,您需要为结果参数传递一个分配的数组。

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多