是我还是c或c ++库中没有标准的修剪函数?是否有任何单一功能充当修剪?如果没有,谁能告诉我为什么修剪不是标准库的一部分?(我知道修剪是在提升)
我的修剪代码是
std::string trim(const std::string &str) { size_t s = str.find_first_not_of(" \n\r\t"); size_t e = str.find_last_not_of (" \n\r\t"); if(( string::npos == s) || ( string::npos == e)) return ""; else return str.substr(s, e-s+1); }
test:cout << trim("\n\r \n\r \n\r \n \n \n文本在这里\n,返回\n\r \n\r \n\r \n"); -edit-我最想知道为什么它不在标准库中,BobbyShaftoe答案很棒.trim不是标准c/c ++库的一部分?
不,你必须自己编写或使用像Boost等其他库.
在C++中,您可以:
#includeconst std::string whiteSpaces( " \f\n\r\t\v" ); void trimRight( std::string& str, const std::string& trimChars = whiteSpaces ) { std::string::size_type pos = str.find_last_not_of( trimChars ); str.erase( pos + 1 ); } void trimLeft( std::string& str, const std::string& trimChars = whiteSpaces ) { std::string::size_type pos = str.find_first_not_of( trimChars ); str.erase( 0, pos ); } void trim( std::string& str, const std::string& trimChars = whiteSpaces ) { trimRight( str, trimChars ); trimLeft( str, trimChars ); }
trim()不在标准库中的原因是,当制定最后一个标准时,他们必须在形式化当前行为(不添加任何新内容,只是稳定已存在的内容)和添加新功能之间取得平衡.一般来说,他们倾向于不添加功能,除非1)否则是不可能的,或者2)使用第三方库存在明显的缺点.进行太多改变会
打破与现有代码的兼容性(可能已经定义了自己的trim()
为编译器编写者(他们之前已经有大量工作)添加更多工作
使语言学习和使用更复杂.
使用trim(),没有重大的互操作性问题.只要你的第三方trim()实现接受一个字符串并返回一个字符串,我们就不关心它的定义.所以在标准库中并不是必需的.它可以很容易地由其他图书馆提供.
相比之下,字符串类或向量之类的东西是标准库必须提供的类,因为如果使用自定义字符串类,则只有来自该库的字符串操作才有效.使用标准库字符串,第三方库可以定位此常见字符串定义,并且每个人都获胜.
当最后一个标准问世时,Herb Sutter 在这里写了一篇非常好的文章
当然,有一个trim()函数会很好,但它们有更大的鱼来炸.他们必须首先标准化所有基础知识.我不认为C++ 0x会添加一个trim函数,但是它会添加很多其他的便利工具,在98年被认为是"不必要的"或太专业.