此代码编译并按预期工作,但注释行由于某种原因不能告诉我原因。
#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这就是为什么我感到困惑
答案 0 :(得分:0)
不仅是注释行,而且如果在字符串的开头有空格,则另一行也会失败。
第一行失败(编译),因为string::find_first_not_of
返回size_t
。从两个大小构造string
只是毫无意义。
第二行可能会失败,因为string::substr
接受长度(不是结束)作为它的第二个参数。