c - 要更换更好的方法(C - Better method for replacing)

2019-10-21 02:44发布

我期待从那里words.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);
    }

Answer 1:

我想如下做到这一点:

  1. 阅读所有的文件到使用缓冲区fgets
  2. 寻找使用重点工作(测试) strstr
  3. 与新使用的字符串替换strncpy
  4. 写入文件(或输出到stdout)任何你想做的事


Answer 2:

你可以使用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);
    }
}


文章来源: C - Better method for replacing
标签: c file stdin