#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str[80];
char find[10];
char change[10];
char* pstr;
char* temp = new char[80];
cin.getline(str, 80);
cin.getline(find,10);
cin.getline(change,10);
pstr =strstr(str,find);
int a = str.find(pstr);
int len;
len = strlen(find);
str.replace(a,len,change);
delete []temp;
cout<< str<< endl;
return 0;
}
错误消息是:
Main.cpp: In function ‘int main()’: Main.cpp:18:15: error: request for member ‘find’ in ‘str’, which is of non-class type ‘char [80]’ int a = str.find(pstr); ^ Main.cpp:21:7: error: request for member ‘replace’ in ‘str’, which is of non-class type ‘char [80]’ str.replace(a,len,change); ^
例如,
what is your nam / nam / name
输出为
'what is your name'
what is matter?
答案 0 :(得分:4)
语句str.find(pstr);
的意思是使用find
作为参数调用对象str
的成员函数pstr
。如果您不确定是否完全理解这句话,建议您找a good C++ book。
问题是,str
具有类型char[80]
,这不是具有可用成员函数find
的类类型的对象。这是C样式的数组,不适合OOP。
您需要的是std::string
:
#include <string>
std::string str;
/* set str */
auto pos = str.find(pstr);
这是std::string::find()
的文档。
答案 1 :(得分:0)
使用std::string
代替char[N]
。
char[80]
类型是基本类型,没有功能。
对于getline,您需要将其更改为:
std::getline(std::cin, str);
答案 2 :(得分:-1)
int main()
{
char str[80];
char find[10];
char change[10];
char* pstr;
char* temp = new char[80];
cin.getline(str, 80);
cin.getline(find,10);
cin.getline(change,10);
pstr = strstr(str,find);
std::string newStr = str;
int a = newStr.find(pstr);
int len;
len = strlen(find);
newStr.replace(a,len,change);
delete []temp;
cout<< newStr << endl;
return 0;
}