我应该输入一个名字。如果这个名字没有空格我想要打印名称,直到它有两个空格,如果它有1个空格,我想再打印一个姓氏。
例如,如果我输入Sara
,我会收到此错误:
在抛出' std :: out_of_range'的实例后终止调用 what():basic_string :: substr:__ post(18446744073709551615)>这个 - "> size()(即4)
int SpaceCounter=0;
for(int i=0;i<=name.length();i++)
{
if(name[i] == ' ')
{
SpaceCounter++;
}
}
if(SpaceCounter>=2)
{
cout<< name;
}
else if(SpaceCounter=1)
{
size_t pos = name.find(" ");
string str3 = name.substr (pos);
cout <<name<<str3;
//break;
}
else if(SpaceCounter=0)
{
for(int i=0;i<2;i++)
{
cout <<name<<" ";
}
}
答案 0 :(得分:0)
我认为你是以错误的方式做到的。您可以在找到它们时删除其他空格。您还应该注意条件中的单=
。这是一个更好的版本:(未经测试)
void f(const std::string& name) {
unsigned spaces = 0;
std::string out;
for(unsigned i = 0; i < name.length(); i++)
if(name[i] == ' ') {
if(spaces == 0)
// allow one space
out += name[i];
spaces++;
} else
out += name[i];
}
if(spaces == 0)
// no spaces found, print 2 times
std::cout << out << ' ' << out << std::endl;
else
std::cout << out << std::endl;
}
答案 1 :(得分:0)
问题在于:
for(int i=0;i<=name.length();i++)
将<=
更改为<
。正如所写,它运行在字符串的末尾,这是异常告诉你的。