我需要编写自己的函数实现,该函数在另一个字符串(文本)中查找字符串(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;
}
}
我确信在写这篇文章时我犯了很多错误,但请记住,我本质上是一个完整的菜鸟。任何帮助指出错误和可能的更正都将非常感激。
答案 0 :(得分:0)
此代码正常运行。请注意,它假设word1
和word2
具有相同的长度,因此它只是一个想法,它是如何完成的,而不是最终的解决方案。
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(..)