C++ 当输入一个没有空格的名称时,会显示“std::out\u of\u range”
我应该输入一个名字。如果这个名字没有空格,我想打印这个名字直到它有两个空格,如果它有一个空格,我想再打印一次姓氏 例如,如果输入Sara,则会出现以下错误: 在抛出'std::out_of_range'的实例后调用terminate 什么:基本字符串::substr:uu pos是18446744073709551615>这个->大小是4C++ 当输入一个没有空格的名称时,会显示“std::out\u of\u range”,c++,string,C++,String,我应该输入一个名字。如果这个名字没有空格,我想打印这个名字直到它有两个空格,如果它有一个空格,我想再打印一次姓氏 例如,如果输入Sara,则会出现以下错误: 在抛出'std::out_of_range'的实例后调用terminate 什么:基本字符串::substr:uu pos是18446744073709551615>这个->大小是4 我认为你做得不对。找到其他空格后,可以删除这些空格。您还应该注意single=in条件。这里有一个更好的版本:未经测试 void f(const std::s
我认为你做得不对。找到其他空格后,可以删除这些空格。您还应该注意single=in条件。这里有一个更好的版本:未经测试
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;
}
问题在于:
for(int i=0;i<=name.length();i++)
更改else-ifSpaceCounter=1=>else-ifSpaceCounter==1您确实记得数组和字符串索引从零开始。但是您忘记了,因为最上面的索引是length-1。您可能需要去掉for循环,以便打印两次名称。也许更有效的方法是:cout
for(int i=0;i<=name.length();i++)