Как исправить эту программу сравнения строк (из argv и scanf)? - PullRequest
0 голосов
/ 09 февраля 2019

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

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

CENSORED ringo CENSORED ringo CENSORED ringo

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

paul CENSORED george john

Вотмой код:

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 Ответ

0 голосов
/ 09 февраля 2019

Как отмечает @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;
}
...