【发布时间】:2014-10-03 00:35:34
【问题描述】:
我正在寻找替换 word.txt 包含的文件中的单词“香蕉测试苹果”将输出 ->“香蕉替换!苹果”它要替换的单词将作为标准输入 ("测试”在这种情况下)
不确定我的代码哪里出错了,我也想知道是否有比 getchar() 函数更好的方法,因为我发现它使用起来很混乱,而且因为你不能备份字符而烦人。
有什么建议吗?谢谢
$ ./a.exe test < words.txt
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char** argv) {
int c = getchar();
int counter = 0;
int i,index;
for (i = 1; i < argc; i++){
for (index = 0; index < strlen(argv[i]); index++){
while (c == argv[i][index]){
counter++;
c = getchar();
index++;
if (counter == strlen(argv[i])){
printf("Replaced!");
}
}
printf("%c ",c);
c = getchar();
counter = 0;
}
}
return (0);
}
【问题讨论】:
-
一个明显的建议是用
fgets()阅读整行然后搜索那些(可能用strstr())来找到要替换的单词,然后在单词和替换之前打印材料在从行中匹配的单词之后恢复搜索之前的文本(因此包含"testing, 1, 2, 3, tested!"的行最终为"Replaced!ing, 1, 2, 3, Replaced!ed!"。 -
你能解释一下你认为你的代码实现的算法——或者至少给它添加 cmets 吗?
-
请向您的程序提供任何输入以及当您提出问题时它产生的任何输出。所以不要只向我们展示你正在运行的命令行,而是向我们展示输入和输出。就目前而言,使用此命令行和代码,您将 words.txt 的内容通过管道传输到 stdin (因此它是您的 getchar() 调用的数据源),然后您正在循环argv[1] "test" 的字母出于某种原因得到 t-e-s-t。它与您的描述完全不符。正如@DavidSchwartz 所说,至少要评论您的误解,以便我们有机会解决它们。
-
@HostileFork:程序的输入来自标准输入,但要替换的单词来源来自命令行。
-
@dreamlax 你是怎么从
./a.exe test < words.txt得到的? :-/ 程序本身不打开任何文件,使用 words.txt 的内容来管道标准输入,并且出于某种原因查看 argv[1] 中的字符 t-e-s-t。