C++ 什么';下面的代码怎么了? #包括 #包括 使用名称空间std; 内部主(空) { 字符串a; cin>>a; a、 擦除(a.end()-1); a、 擦除(a.开始()+1); 字符串ge=“oae”; a、 插入(a.begin()+1,通用电气); cout
C++ 什么';下面的代码怎么了? #包括 #包括 使用名称空间std; 内部主(空) { 字符串a; cin>>a; a、 擦除(a.end()-1); a、 擦除(a.开始()+1); 字符串ge=“oae”; a、 插入(a.begin()+1,通用电气); cout,c++,string,C++,String,a.insert(a.begin()+1,ge);是问题所在 string::insert函数将int作为第一个参数,您正在传入一个迭代器。您想做什么?a.insert(a.begin()+1,ge);是问题所在 string::insert函数将int作为第一个参数,并传入迭代器。您想做什么? 需要 a.insert(a.begin()+1, ge); 或 否则该代码无效。 需要 a.insert(a.begin()+1, ge); 或 否则该代码无效。工作版本: a.insert(1,
a.insert(a.begin()+1,ge);
是问题所在
string::insert
函数将int作为第一个参数,您正在传入一个迭代器。您想做什么?a.insert(a.begin()+1,ge);
是问题所在
string::insert
函数将int作为第一个参数,并传入迭代器。您想做什么?
需要
a.insert(a.begin()+1, ge);
或
否则该代码无效。
需要
a.insert(a.begin()+1, ge);
或
否则该代码无效。工作版本:
a.insert(1, ge);
#包括
#包括
使用名称空间std;
内部主(空)
{
字符串a;
cin>>a;
a、 擦除(a.end()-1);
a、 擦除(a.开始()+1);
字符串ge=“oae”;
a、 插入(1,ge);//此处
cout工作版本:
a.insert(1, ge);
#包括
#包括
使用名称空间std;
内部主(空)
{
字符串a;
cin>>a;
a、 擦除(a.end()-1);
a、 擦除(a.开始()+1);
字符串ge=“oae”;
a、 插入(1,ge);//此处
cout没有使用迭代器和参数集的std::string::insert()
重载。您可以选择使用:
#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;
}
或:
请注意,这将允许您的代码进行编译,但可能存在一些运行时问题,例如:
- 如果
a
是空字符串,则a.end()-1
未定义
- 如果
a
是空字符串,则a.begin()+1
同样未定义
没有使用迭代器和string
参数集的std::string::insert()
重载。您可以选择使用:
#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;
}
或:
请注意,这将允许您的代码进行编译,但可能存在一些运行时问题,例如:
- 如果
a
是空字符串,则a.end()-1
未定义
- 如果
a
是空字符串,则a.begin()+1
同样未定义
编译器给了您什么错误?还有,哪个编译器?可能您使用的是非标准编译器,或者使用的选项导致其行为不标准。编译器给了您什么错误?还有,哪个编译器?可能您使用的是非标准编译器,或者使用的选项导致其行为不标准n标准方式。std::basic_string::insert的重载不接受int参数。一些重载接受size_t
参数,但没有一个接受int。@Billy:有趣的是,我的编译器抛出了:错误C2664:'std::basic_string&std::basic_string::insert(无符号int,const std::basic_string&)“:无法将参数1从“std::_String_iterator”转换为“unsigned int”我想我应该说“unsigned int”.Size_t是编译器上unsigned int的typedef。但是,标准并没有这样定义它。它可以是unsigned long、unsigned long、unsigned short或任何其他类似类型,并且符合标准。std::basic_string::insert的重载都不会使用int参数。有些重载使用Size_t
参数,但@Billy:有趣的是,我的编译器吐出了:错误C2664:'std::basic_string&std::basic_string::insert(unsigned int,const std::basic_string&)':无法将参数1从'std::_string_iterator'转换为'unsigned int',我想我应该说“unsigned int”.Size_t是编译器上unsigned int的typedef。但是,标准并没有这样定义。它可以是unsigned long、unsigned long、unsigned short或任何其他类似类型,并符合标准。+1因为它是正确的,而且您是新的,但在将来,您不可能仅仅因为发布更正的代码而被提升e、 你需要解释为什么代码一开始就不正确。+1因为它是正确的,而且你是新来的,但在将来,你不太可能仅仅因为发布更正的代码而获得提升。你需要解释为什么代码一开始就不正确。
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