是c还是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);
}
测试:cout<<修剪(“\ n \ r \ r \ n \ r \ n \ n \ n文本在这里\ n,返回\ n \ r \ n \ r \ n \ r \ n”); -编辑- 我大多想知道为什么它不在标准库中,BobbyShaftoe答案很棒。 trim is not part of the standard c/c++ library?
答案 0 :(得分:29)
不,您必须自己编写或使用其他库,如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 );
}
答案 1 :(得分:16)
trim()不在标准库中的原因是,当制定最后一个标准时,他们必须在形式化当前行为(不添加任何新内容,只是稳定已存在的内容)和添加新功能之间取得平衡。一般来说,他们倾向于不添加功能,除非1)否则是不可能的,或者2)使用第三方库存在明显的缺点。做出太多改变
使用trim(),没有重大的互操作性问题。只要你的第三方trim()实现接受一个字符串并返回一个字符串,我们就不关心它的定义。所以它并非真正必要在标准库中。它可以很容易地由其他图书馆提供。
相比之下,像字符串类或向量这样的类是标准库必须提供的类,因为如果使用自定义字符串类,则只有来自该库的字符串操作才有效。使用标准库字符串,第三方库可以定位此常见字符串定义,并且每个人都获胜。
当最后一个标准出来时,Herb Sutter撰写了一篇非常好的文章here
当然,有一个trim()函数会很好,但它们有更大的鱼来炸。他们必须首先标准化所有基础知识。我不认为C ++ 0x会添加一个trim函数,但它会添加许多其他的便利工具,这些实用程序在98年被认为是“不必要的”或过于专业化。
答案 2 :(得分:3)
正如其他人所说,委员会正忙于(很多)其他问题。 Boost填补了一些空白,例如string_algo图书馆的trimming functions:
string testTrim(" \n\r\r\n \r\n text here\nwith return \n\r\r\n \r\n ");
trim(testTrim);
cout << testTrim;
答案 3 :(得分:1)
我不太了解C ++,但check this out看看如何在C中完成此任务。(在我的辩护中:你在标题中说过 C / C ++: - )
答案 4 :(得分:1)
在过去,使用 scanf() ,一个空格可以匹配任意数量的空白字符。
这就是为什么我们使用 fgets() ,然后使用 sscanf() 。防止将换行符作为该空格的一部分。
答案 5 :(得分:1)
我认为主要原因是' '
是一个相当狭窄的空白定义;例如,我还希望通过L' '
函数删除L' '
和trim()
;但是,只有 locale 库具有这样的洞察力。
同样的理由适用于常用的to_upper
和to_lower
方法 - 有些人(特别是在土耳其)不同意通常用于ASCII的典型c &= ~0x20;
映射
答案 6 :(得分:-1)
您可以使用VC ++。 CString类有一个trim函数。 :d