运行时出现此错误:
在抛出'std :: out_of_range'的实例后终止调用 what():basic_string :: substr:
我是全新的,任何其他提示也会受到赞赏。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
int position = 1;
string letter;
cout << "Enter in your full name seperated by a space: ";
getline (cin, name);
cout << name.substr(0, 1);
while (position <= name.length())
{
position++;
letter = name.substr(position, 1);
if (letter == " ")
{
cout << name.substr(position + 1, 1) << " ";
}
}
cout << endl;
return 0;
}
答案 0 :(得分:0)
在你的循环中,position
将增加到等于用户输入的字符的数字(即&#34; Abc Def&#34;最后一次循环迭代:位置= 8)。在这种情况下,name.substr(position, 1);
尝试在字符串中的最后一个字符后提取字符,因此std::out_of_range
例外。
您可能希望将循环条件更改为:while (position <= name.length() - 1)
或while (position < name.length())
答案 1 :(得分:0)
您正在尝试在最后一个索引之后到达索引,您需要将循环条件更改为:
position < name.length()
你可以使用更多用于此类问题的for循环来解决这个问题,你只需用你的while循环代替:
for (int position = 0; position < (name.length()-1); position++) {
if (name[position] == ' ') {
cout << name[position+1];
}
}
使用此功能,您无需使用substr()
方法string letter
。