C - И оператор между двумя массивами - PullRequest
0 голосов
/ 19 декабря 2018

Я хочу сделать выборку массива на основе вектора истина-ложь:

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);
}

Мои вопросы:
Это нормальный способ сделать это или есть более гладкий способ достижения этого?

1 Ответ

0 голосов
/ 20 декабря 2018

Чтобы ответить на ваш вопрос, это нормальный способ сделать это.

С алгоритмической точки зрения это приемлемое решение, поскольку вам необходимо создать дополнительный массив, который вы делаете.

Я игнорирую маленькие предостережения, как указано в комментариях.

Примечание: я бы создал функцию, похожую на and_arrays(const char a[], const char b[], char result[]);, где вам нужно передать выделенный массив для параметра результата.

...