Как исправить эту программу сравнения строк (из argv и scanf)?

Попытка исправить эту программу, которая сравнивает слова, найденные в argv и слова из scanf(). Если найдено то же слово, оно печатает "CENSORED", а если нет, просто печатает слово. Например, у меня есть файл с именем beatles.txt, в котором есть следующие слова: paul ringo george john

Если я скомпилирую эту программу и протестирую ее так:./a.out ringo

ЦЕНСОРА РИНГО ЦЕНЗУРА РИНГО ЦЕНСОРА РИНГО

Принимая во внимание, что я хочу, чтобы это было выводом:

Пол ЦЕНСОРД джордж джон

Вот мой код:

int main(int argc, char* argv[]) {

char word_arr[10000][20];
int i=0;

while ( scanf("%s",word_arr[i])!=EOF) {

    for (int i=1; i<argc; i++) {

        if (strstr(word_arr[i],argv[i]) != NULL) {

            printf("CENSORED\n");
        }

        else {

            printf("%s\n",word_arr[i]);

        }

    }
i++;

}

return 0;

}

1 ответ

Как отмечает @WeatherVane,

Внутренний i следит за внешним i, Выберите другое имя для одного из этих идентификаторов.

Вот один из способов сделать это:

#include <stdbool.h>
#include <string.h>
#include <stdio.h>

int main(int argc, char* argv[]) {
    char word_arr[10000][20];
    int j = 0;

    while (scanf("%s", word_arr[j]) != EOF) {
        bool is_censored = false;
        for (int i = 1; i < argc; i++) {
            if (strstr(word_arr[j], argv[i])) {
                printf("CENSORED ");
                is_censored = true;
                break;
            }
        }
        if (!is_censored) printf("%s ", word_arr[j]);
        j++;
    }

    printf("\n");
    return 0;
}
Другие вопросы по тегам