findAndReplace函数的实现

时间:2016-05-16 19:23:45

标签: c string function pointers recursion

我需要编写自己的函数实现,该函数在另一个字符串(文本)中查找字符串(word1),并用第三个字符串(word2)替换文本中word1的所有实例。 这是我到目前为止所拥有的;

void findandreplace(char text[],const char word1[], const char word2[])
{
    char *start;
    char *end;
    start=strstr(text,word1);
    end=start;
    if (strcmp(text,start))
    {
        end+=strlen(word2);
        strcpy(&text[end-start+1],&text[(int)start]);
        strcpy(text,word2);
        findandreplace(end,word1,word2);
    }
    if (!strcmp(text,start))
    {
        end++;
        findandreplace(end,word1,word2);
    }
    if (!text)
    {
        return;
    }
}

我确信在写这篇文章时我犯了很多错误,但请记住,我本质上是一个完整的菜鸟。任何帮助指出错误和可能的更正都将非常感激。

1 个答案:

答案 0 :(得分:0)

此代码正常运行。请注意,它假设word1word2具有相同的长度,因此它只是一个想法,它是如何完成的,而不是最终的解决方案。

void findandreplace(char text[], const char word1[], const char word2[])  
{
    if(strlen(word1) == strlen(word2) &&   
        strcmp(word1, word2)) // The same lengths and words aren't equal to each other.
    {
        char *start;
        // start=strstr(text, "good"); // We don't seek string "good",
        start = strstr(text, word1);  // but string word1[].
        while(start != NULL)
        {
            strncpy(start, word2, strlen(word2));
            start = strstr(text, word1);
        }
    }
}  

参考您的代码:

  • start指向子串"好" (如果存在),但您要搜索word1[]
  • text[(int)start] - 将指针转换为int是没有意义的。如果要获取text[]指向start的索引,则需要使用指针算法:text[start - text]
  • strcpy(text, word2)会使text[]成为word2字符串的实际副本,您需要的是strncpy(..)