当前位置:  开发笔记 > 编程语言 > 正文

trim不是标准c/c ++库的一部分?

如何解决《trim不是标准c/c++库的一部分?》经验,为你挑选了2个好方法。

是我还是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 ++库的一部分?



1> BobbyShaftoe..:

不,你必须自己编写或使用像Boost等其他库.

在C++中,您可以:

#include 

const 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 );
} 



2> jalf..:

trim()不在标准库中的原因是,当制定最后一个标准时,他们必须在形式化当前行为(不添加任何新内容,只是稳定已存在的内容)和添加新功能之间取得平衡.一般来说,他们倾向于不添加功能,除非1)否则是不可能的,或者2)使用第三方库存在明显的缺点.进行太多改变会

打破与现有代码的兼容性(可能已经定义了自己的trim()

为编译器编写者(他们之前已经有大量工作)添加更多工作

使语言学习和使用更复杂.

使用trim(),没有重大的互操作性问题.只要你的第三方trim()实现接受一个字符串并返回一个字符串,我们就不关心它的定义.所以在标准库中并不是必需的.它可以很容易地由其他图书馆提供.

相比之下,字符串类或向量之类的东西是标准库必须提供的类,因为如果使用自定义字符串类,则只有来自该库的字符串操作才有效.使用标准库字符串,第三方库可以定位此常见字符串定义,并且每个人都获胜.

当最后一个标准问世时,Herb Sutter 在这里写了一篇非常好的文章

当然,有一个trim()函数会很好,但它们有更大的鱼来炸.他们必须首先标准化所有基础知识.我不认为C++ 0x会添加一个trim函数,但是它会添加很多其他的便利工具,在98年被认为是"不必要的"或太专业.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有