#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string a;
cin>>a;
a.erase(a.end()-1);
a.erase(a.begin()+1);
string ge = "oae";
a.insert(a.begin()+1, ge);
cout<<a<<endl;
return 0;
}
它不编译,我不知道为什么。你能告诉我什么是错的
答案 0 :(得分:3)
http://www.cplusplus.com/reference/string/string/insert/
string& insert ( size_t pos1, const string& str );
string& insert ( size_t pos1, const string& str, size_t pos2, size_t n );
string& insert ( size_t pos1, const char* s, size_t n);
string& insert ( size_t pos1, const char* s );
string& insert ( size_t pos1, size_t n, char c );
iterator insert ( iterator p, char c );
void insert ( iterator p, size_t n, char c );
template<class InputIterator>
void insert ( iterator p, InputIterator first, InputIterator last );
您对std::basic_string<t>::insert
的呼叫与上述任何重载都不匹配。
a.insert(a.begin()+1, ge);
需要
a.insert(a.begin()+1, ge.begin(), ge.end());
或
a.insert(1, ge);
否则该代码无效。
答案 1 :(得分:1)
a.insert(a.begin()+1, ge);
就是问题所在。
string::insert
函数将int作为第一个参数,并且您将传入迭代器。你想做什么?
答案 2 :(得分:1)
工作版:
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string a;
cin>>a;
a.erase(a.end()-1);
a.erase(a.begin()+1);
string ge = "oae";
a.insert(1, ge); // here
cout<<a<<endl;
return 0;
}
答案 3 :(得分:1)
没有std::string::insert()
重载,它接受迭代器和string
参数集。您可以选择使用:
a.insert( 1, ge); // use an index and a string
或:
a.insert( a.begin()+1, ge.begin(), ge.end()); // use an destination iterator, and
// a set of iterators indicating a range
请注意,这将允许您的代码进行编译,但可能会遇到一些运行时问题,例如:
a
为空字符串,则a.end()-1
未定义a
为空字符串,则a.begin()+1
同样未定义