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
放在一起,还是只放在第一个实例上?该问题的答案会改变您需要做的工作。