饰件不是标准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;