我正在寻找从word.txt包含“banana test apple”输出的文件中替换单词 - > “香蕉取而代之!苹果”它将要替换的词语将成为stdin的一个参数(在这种情况下为“测试”)
我不知道我的代码出错的地方,我也想知道是否有更好的方法来实现它,而不是获取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);
}
答案 0 :(得分:1)
我会这样做:
fgets
strstr
strncpy
答案 1 :(得分:0)
您可以使用scanf
一次读取一个字词:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char wordbuffer[100];
while (scanf("%99s", wordbuffer) == 1)
{
int replace = 0;
for (int i = 1; i < argc && !replace; i++)
if (strcmp(wordbuffer, argv[i]) == 0)
replace = 1;
if (replace)
printf("Replaced! ");
else
printf("%s ", wordbuffer);
}
}
如果您使用的是符合最新POSIX规范的现代系统,您可以利用m
分配分配字符,并为您分配适当的空间,以便您不要必须使用一些任意最大字符数。
int main(int argc, char *argv[])
{
char *wordbuffer;
while (scanf("%ms", &wordbuffer) == 1)
{
int replace = 0;
for (int i = 1; i < argc && !replace; i++)
if (strcmp(wordbuffer, argv[i]) == 0)
replace = 1;
if (replace)
printf("Replaced! ");
else
printf("%s ", wordbuffer);
free(wordbuffer);
}
}