c - 在替换从文本文件中读取的单词的程序中,如何解释不同的单词长度?

标签 c string algorithm file-io file-read

我正在尝试用单词“CENSORED”替换传入的单词,但我无法弄清楚在哪里可以解释替换单词和审查单词之间的区别。这是输入和输出的示例。

./a.out Ophelia draw or <poem.txt   
Said Hamlet to CENSORED,  
I'll CENSOREDsketch of thee,  
What kind of pencil shall I use?  
2B CENSORED2B?   

但正确的输出应该是:

Said Hamlet to CENSORED,  
I'll CENSORED a sketch of thee,  
What kind of pencil shall I use?   
2B CENSORED not 2B?   

完整代码:

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv){
char fileRead[4096];
char replace[] = "CENSORED";
int arg=0;
size_t word_len = strlen(argv[arg]);
while (fgets(fileRead, sizeof(fileRead), stdin) != 0)
{
    char *start = fileRead;
    char *word_at;
 for (arg = 1; arg < argc; arg += 1) {
 if ((word_at = strstr(start, argv[arg])) != 0) {
        printf("%.*s%s", (int)(word_at - start), start, replace);
        start = word_at + word_len -1;
}
}
    printf("%s", start);
}
    printf("\n");
return (0);
}

我非常感谢任何提示!谢谢:)

最佳答案

创建一个大小为 4096(假设行长度不超过 4096)的临时输出 char 数组,用于存储完整的处理行。如果您从文件中逐字阅读会更好。

将读取的单词与每个可替换单词(Ophelia、draw 或 or)进行比较,如果不需要替换,则将该单词附加到带有空格的输出字符数组中。如果必须替换单词,则将单词 CENSORED 附加到输出字符数组。

如果到达新行 printf 整个输出 char 数组,重复使用输出数组并重复该过程,直到到达 EOF

关于c - 在替换从文本文件中读取的单词的程序中,如何解释不同的单词长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36393523/

相关文章:

c++ - 构建最大的堆叠塔与集团和限制

c - 如何将二进制字符串以二进制形式存储在文件中?

c - 用逗号printf连接变量

c++ - 在匿名的情况下使用 libcurl 检索 github 版本

algorithm - 是否有用于在链接图表上定位节点的算法?

c# - "int"到 "generic"数据类型在 c# 中给出错误

C 程序 - 使用提供的方程计​​算并显示每年的人口

c - 查找 2 个字符串是否由相同单词组成的函数

python - 如何知道字符串中是否有数字

c++ - 字符串复制函数产生 `pointer being freed was not allocated`