试图替换cstring中的单词

时间:2013-12-14 23:09:40

标签: c++ cstring strstr

我现在很困惑。最后,我想将sentence发送给replaceSubstring,然后返回相同的句子,将“the”替换为“that”。我知道我应该使用指针,但我不知道究竟在哪里以及为什么。有什么建议吗?

我得到的错误是:

Ch12_08.cpp: In function ‘char replaceSubstring(char*, char*, char*)’:
Ch12_08.cpp:16: error: request for member ‘strstr’ in ‘sent’, which is of non-class type ‘char*’
Ch12_08.cpp:17: error: invalid conversion from ‘char*’ to ‘char’
Ch12_08.cpp:18: error: invalid conversion from ‘char*’ to ‘char’
Ch12_08.cpp: In function ‘int main()’:
Ch12_08.cpp:30: error: expected primary-expression before ‘]’ token

这是我正在使用的代码..

#include <iostream>
#include <cstring> // Needed for strstr to work

using namespace std;

char replaceSubstring(char sent[], char oldW[], char newW[]){
    char *strPtr = NULL;

    strPtr = &sent.strstr(sent, oldW);
    *strPtr = newW;
    return sent;
}

int main()
{
    char sentence[35] = "the dog jumped over the fence";
    char oldWord[5] = "the";
    char newWord[6] = "that";
    char newSentence[35] = {NULL};

    wcout << "The original sentence is: " << sentence << endl;

    newSentence[] = replaceSubstring(sentence, oldWord, newWord);


    return 0;
}

提前致谢!

1 个答案:

答案 0 :(得分:0)

错误消息告诉您确切的错误:strstr不是char *的成员函数。 char *不是类类型。

相反,strstr只是一个简单的函数。这对你来说可能更好:

strPtr = strstr(sent, oldW);

找到oldWstrPtr的位置后,您需要将newW复制到oldW。如果newWoldW的长度相同,那应该不会很困难。如果它们的长度可能不同(就像你的例子中那样),那么你就可以为你做好工作了。

在任何情况下,strstr之后的行都不会达到您想要的效果。您需要一个循环来复制字符或类似字符。

最后,你无法从函数中返回一个字符数组。如果希望函数填充该数组,则需要将newSentence作为参数传递给函数。

我的一部分想知道为什么当std::string使这个更好时,你甚至用C字符串来尝试这个...