c ++使用迭代器删除空格失败

时间:2016-09-08 13:51:52

标签: c++ string iterator

此代码编译并按预期工作,但注释行由于某种原因不能告诉我原因。

#include <iostream>

int main()
{
    std::cout << "Enter a line:\n";
    std::string Line;
    std::getline(std::cin,Line);
    const std::string Whitespace = " \t\t\f\v\n\r";
    //std::string Line= std::string(Line.find_first_not_of(Whitespace),Line.find_last_not_of(Whitespace)+1); // Why doesnt this work?
    std::string Line= Line.substr(Line.find_first_not_of(Whitespace),Line.find_last_not_of(Whitespace)+1);
    std::cout << "You entered:" << Line << "\n";
}
编辑我是在印象中找到las返回一个迭代器而不是size_t这就是为什么我感到困惑

1 个答案:

答案 0 :(得分:0)

不仅是注释行,而且如果在字符串的开头有空格,则另一行也会失败。

第一行失败(编译),因为string::find_first_not_of返回size_t。从两个大小构造string只是毫无意义。

第二行可能会失败,因为string::substr接受长度(不是结束)作为它的第二个参数。