用C替换数组中的字符串

时间:2014-10-12 19:32:42

标签: c

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

int main(int argc, char* argv[])
{
   int i = 0;
   char c;
   char *array;
   char *data;
   char *ret;


   array = (char *) malloc(100);
   data = (char *) malloc(strlen(argv[1])+1);
   strcpy(data, argv[1]);    // store the word john into the array called data
   while((c=getchar())!=EOF) // stores the words in the txt file into array
   {
        array[i]=c;
        i++;
   }
    ret = strstr(array, data); // find a substring (john in this case)
    printf("The substring is: %s\n", ret);
    *ret = "jack"; // Doesn't work here, but I want to replace john with jack
    free(data);
    free(array);
    return 0;
}

我已经对strstr工具做了一些研究,看起来它找到了第一次出现的子串并返回指向该位置的指针。使用该指针我想修改它,但对我来说不是那么好。

当我运行它时,我在Ubuntu的终端看起来像这样:

./ a.out john&lt; beatles.txt

我的披头士乐队文字看起来像这样;

约翰

林檎

约翰

最后,我希望我的包含这4个名字的数组让john替换为jack例如。无论如何我可以使用strstr工具给我的指针来做到这一点吗?

我想我需要一段时间llop或者循环tog et数组中的每个john都要用jack *重新生成

1 个答案:

答案 0 :(得分:0)

您不想修改指针,您想要修改指针指向的内容。 ret也指向一个字符,因此*ret是一系列字符的第一个字符,在本例中是字符 'j',因此您无法为其分配字符串。您必须替换该序列的每个字符。函数memcpy可以帮助您。

替换其他出现的&#34; john&#34;你可以使用这个循环:

while(ret = strstr(array, data)){
    printf("The substring is: %s\n", ret);
    memcpy(ret, "jack", strlen("jack"));
}

strstr()如果找不到任何内容则会返回NULL,当发生这种情况时,您将会退出循环。

您的代码也存在一些问题:

  • 您可以使用argv[1]代替data
  • 最好通过调用fread()将文件复制到缓冲区。