如何解决这个问题比较字符串(从的argv和scanf)计划?

问题描述 投票:2回答:1

试图解决这一问题的程序,从比较的scanf通过的argv找到的词和一()。如果发现同一个词,它打印“截尾”,如果没有,只是打印字。例如,我有一个叫beatles.txt该文件有以下文字:保罗·林戈乔治·约翰

如果我编译这个程序并对其进行测试是这样的:./a.out林檎<beatles.txt,这是输出:

截尾林戈删失林戈删失林戈

然而,我想这是输出:

保罗·乔治删失约翰

这里是我的代码:

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;

}
c arrays scanf strstr
1个回答
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.