Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当输入一个没有空格的名称时,会显示“std::out\u of\u range”_C++_String - Fatal编程技术网

C++ 当输入一个没有空格的名称时,会显示“std::out\u of\u range”

C++ 当输入一个没有空格的名称时,会显示“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

我应该输入一个名字。如果这个名字没有空格,我想打印这个名字直到它有两个空格,如果它有一个空格,我想再打印一次姓氏

例如,如果输入Sara,则会出现以下错误:

在抛出'std::out_of_range'的实例后调用terminate 什么:基本字符串::substr:uu pos是18446744073709551615>这个->大小是4


我认为你做得不对。找到其他空格后,可以删除这些空格。您还应该注意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++)