Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.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/c+的一部分+;图书馆? 是C还是C++库中没有标准的修剪函数?是否有任何单独的功能作为修剪?如果没有,谁能告诉我为什么trim不是标准库的一部分?(我知道trim正在升级)_C++_Trim_Standard Library - Fatal编程技术网

饰件不是标准c/c+的一部分+;图书馆? 是C还是C++库中没有标准的修剪函数?是否有任何单独的功能作为修剪?如果没有,谁能告诉我为什么trim不是标准库的一部分?(我知道trim正在升级)

饰件不是标准c/c+的一部分+;图书馆? 是C还是C++库中没有标准的修剪函数?是否有任何单独的功能作为修剪?如果没有,谁能告诉我为什么trim不是标准库的一部分?(我知道trim正在升级),c++,trim,standard-library,C++,Trim,Standard Library,我的修剪代码是 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

我的修剪代码是

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

测试:不能不,你必须自己写或者使用其他库,比如Boost等等

在C++中,你可以这样做:

#include <string>

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 );
} 
#包括
常量std::字符串空白(“\f\n\r\t\v”);
void trimRight(标准::字符串和字符串,
常量std::string&trimChars=空格)
{
std::string::size\u type pos=str.find\u last\u not\u of(trimChars);
str.erase(pos+1);
}
左虚线(标准::字符串和字符串,
常量std::string&trimChars=空格)
{
std::string::size\u type pos=str.find\u first\u not\u of(trimChars);
str.erase(0,pos);
}
void trim(std::string&str,const std::string&trimChars=空白)
{
trimRight(str,trimChars);
trimLeft(str,trimChars);
} 

> p>我对C++的了解不多,但要了解如何在C.实现这一点(在我的辩护中:你确实说过:<强> C++ <强> /C++ >标题:< /p> < p>过去,用<强> SCANFER()>强>,一个空格将匹配任意数量的空白字符。

这就是为什么我们使用fgets(),然后使用sscanf()。防止将换行符作为空白的一部分进行匹配。

标准库中不包含trim()的原因是,在制定上一个标准时,他们必须在规范化当前行为(不添加任何新内容,只是稳定现有内容)和添加新功能之间取得平衡。一般来说,他们宁愿不添加功能,除非1)否则不可能,或者2)使用第三方库存在明显的缺点。做太多的改变会导致

  • 中断与现有代码的兼容性(可能已经定义了自己的trim()
  • 为编译器编写者添加更多工作(他们前面已经有大量工作要做)
  • 使语言学习和使用更加复杂
使用trim(),没有重大的互操作性问题。只要第三方trim()实现接受字符串并返回字符串,我们就不关心它的定义位置。因此,它在标准库中不是必需的。其他库可以轻松提供它

相比之下,字符串类或向量类是标准库必须提供的类,因为如果使用自定义字符串类,则只有来自该库的字符串操作才能工作。使用标准库字符串,第三方库可以针对此公共字符串定义,并且每个人都赢

当最后一个标准出台时,赫伯·萨特(Herb Sutter)写了一篇文章对此进行了很好的描述


当然,有一个trim()函数会很好,但他们还有更重要的事情要做。他们必须首先标准化所有的基础知识。我不认为C++0x会添加trim函数,但它会添加许多其他在1998年被认为“不必要”的便利实用程序或者过于专业化。

正如其他人所说,委员会忙于处理(许多)其他问题。填补了一些空白,比如字符串算法库的:

string testTrim(“\n\r\n\r\n文本在此\n返回\n\r\n\r\n”);
trim(testTrim);

您可以使用VC++。CString类有一个trim函数。:D

我认为主要原因是
'
是一个相当狭窄的空白定义;例如,我还想要
L' '
L' '
trim()
函数删除;但是,只有区域设置库具有这样的洞察力


同样的原理也适用于通常要求的
to_upper
to_lower
方法——有一些人(特别是在土耳其)他们不同意ASCII通常使用的典型的
c&=~0x20;
映射。

这是我见过的所有最短实现中最好的一个,而且你甚至不需要做任何花哨的技巧就可以做到。干得好!有用于操作流的函数,而不是字符串。存在类似的函数,例如
stream>>std::ws
,它使用所有后续空格。
string testTrim(" \n\r\r\n \r\n text here\nwith return \n\r\r\n \r\n ");
trim(testTrim);
cout << testTrim;