#c #string #c 11
#c #строка #c 11
Вопрос:
Есть проблема, которую я не могу понять. Посмотрите на картинку следующим образом:
#include <iostream>
#include<string>
using namespace std;
// use the string rep to replace the value in string str
void Replace(stringamp; str,const charamp; value,const stringamp; rep)
{
auto iter = str.begin();
while(iter != str.end())
{
if(*iter == value)
{
iter = str.erase(iter);
iter = str.insert(iter,rep.begin(),rep.end());
iter = rep.size();
continue;
}
iter;
}
}
int main()
{
string str = "Welcome to Stack Overflow";
Replace(str,' ',"****");
cout<<str<<endl;
return 0;
}
GCC 4.9(C 11)
Сообщения компилятора:
main.cpp: In function 'void Replace(std::stringamp;, const charamp;, const stringamp;)':
main.cpp:14:18: error: no match for 'operator=' (operand types are '__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >' and 'void')
iter = str.insert(iter,rep.begin(),rep.end());
но..Я не могу найти функцию, нарисованную над изображением в cppreference.
http://en.cppreference.com/w/cpp/string/basic_string/insert
итак: Пожалуйста, скажите мне, я сказал неправильно?? и тогда как мне это подогнать ?
Комментарии:
1. Как вы компилируете? Включен ли у вас C 11?
2. да, в дополнение к запуску его в моем компиляторе (CodeBlock 16.1, скомпилированный C 11). Я пробую это на сайтах cppreference, используя GCC 4.9 (C 11).
3. Не может размножаться . Похоже, у вас действительно не включен C 11, поскольку вызываемая вами функция возвращает
void
значения перед C 11 и aiterator
в C 11 и выше.4. Я не могу найти соответствующую функцию insert, возвращающую итератор в C 11. как ты его находишь? где? Я уверен, что я уже использовал компилятор C 11, который попробовал несколько раз. Вы запустили его без ошибок??
5. Он указан в ссылке на cppreference в вашем вопросе. см. Перегрузка 8. Это было
void insert( iterator pos, InputIt first, InputIt last );
до C 11, и теперь этоiterator insert( const_iterator pos, InputIt first, InputIt last );