Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 尝试替换字符串中的单词_C++_Cstring_Strstr - Fatal编程技术网

C++ 尝试替换字符串中的单词

C++ 尝试替换字符串中的单词,c++,cstring,strstr,C++,Cstring,Strstr,在这一点上我很困惑。最后,我想将句子发送到替换子字符串,然后返回相同的句子,并将“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

在这一点上我很困惑。最后,我想将
句子
发送到
替换子字符串
,然后返回相同的句子,并将“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;
}
#包括
#包括//strstr工作所需的
使用名称空间std;
char replaceSubstring(char sent[],char oldW[],char newW[]){
char*strprtr=NULL;
strprtr=&sent.strstr(sent,oldW);
*strPtr=newW;
返回发送;
}
int main()
{
char句子[35]=“狗跳过了栅栏”;
char oldWord[5]=“the”;
char newWord[6]=“that”;
char newSentence[35]={NULL};

wcout错误消息会准确地告诉您错误所在:
strstr
不是
char*
的成员函数
char*
不是类类型

相反,
strstrstr
只是一个简单的函数。这可能对您更有用:

strPtr = strstr(sent, oldW);
一旦你找到
oldW
strprtr
中的位置,你就需要在
oldW
上复制
newW
。如果
newW
oldW
是相同的长度,这应该不难。如果它们可能是不同的长度(在你的例子中似乎是这样的),你就有了你的工作

在任何情况下,
strstr
之后的行都不能满足您的要求。您需要一个循环来复制字符或类似的内容

最后,您不能像这样从函数返回字符数组。如果希望函数填充该数组,则需要将
newSentence
作为参数传递给函数


我有一部分想知道你为什么要用C字符串来尝试这个,而
std::string
让它变得更好…

谢谢你的回答。这是为了一个类。我想知道为什么。不过我不介意额外的洞察力。这似乎与我们所学的其他东西几乎是反直觉的。顺便问一句,你应该重复一下吗将
oldW
的所有实例与
newW
放在一起,还是只放在第一个实例上?该问题的答案会改变您需要做的工作。