查找并替换字符串中的单词

时间:2018-11-12 09:50:39

标签: c++ string

#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?

3 个答案:

答案 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;
}