Простая строка заменяет ошибку, несмотря на правильные аргументы - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь заменить часть строки, используя данные, указанные здесь , следующим кодом:

#include <iostream>
#include <string>
using namespace std ; 

int main(){
    string ori = "this is a test"; // to replace "is a" with "IS A"
    string part = "is a"; 
    int posn = ori.find(part); 
    int len = part.size(); 
    cout << posn << endl; 
    ori.replace(posn, len, ori, "IS A"); 
    cout << ori; 
}

Однако выдается длинная ошибка, начинающаяся с:

rnreplacestr.cpp:11:36: error: no matching function for call to ‘std::__cxx11::basic_string<char>::replace(int&, int&, std::__cxx11::string&, const char [5])’
  ori.replace(posn, len, ori, "IS A");
                                    ^
In file included from /usr/include/c++/6/string:52:0,
                 from /usr/include/c++/6/bits/locale_classes.h:40,
                 from /usr/include/c++/6/bits/ios_base.h:41,
                 from /usr/include/c++/6/ios:42,
                 from /usr/include/c++/6/ostream:38,
                 from /usr/include/c++/6/iostream:39,
                 from rnreplacestr.cpp:1:

Где проблема и как ее можно решить?Спасибо за вашу помощь.

Ответы [ 2 ]

8 голосов
/ 27 сентября 2019

Сообщение об ошибке совершенно верно - нет соответствующей функции.Я думаю, что вы хотели использовать трехпараметрическую версию std :: string :: replace .

Изменить

ori.replace(posn, len, ori, "IS A"); 

на

ori.replace(posn, len, "IS A"); 
4 голосов
/ 27 сентября 2019

String replace имеет только 3 аргумента, а не 4. См. Документацию http://www.cplusplus.com/reference/string/string/replace/

Ваша строка

ori.replace(posn, len, ori, "IS A"); 

должна быть

ori.replace(posn, len, "IS A");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...