试图解决这一问题的程序,从比较的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;
}
作为@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;
}