草庐IT

string-comparison-functions

全部标签

c++ - Lint 更喜欢 std :string rather than clear() 上的 erase() 方法

使用Lint,它反复反对在std字符串上使用clear,并希望建议使用不带参数的删除方法。查看文档并执行我想要的操作,即将字符串的大小调整为零个元素,以便该字符串为空且没有任何元素。此时我不想删除字符串,只需从中删除所有成员即可。我的问题是这两种方法有什么区别,有谁知道我应该使用erase而不是clear方法的原因吗? 最佳答案 我看不出任何原因。恰恰相反:我实际上不得不查看引用以查看erase()是否可以在没有参数的情况下调用。erase()用于从字符串中删除一些指定的字符。clear()用于删除字符串的全部内容(但不包括其容量)

c++ - 如何干净地使用:const char* 和 std::string?

tl:drHowcanIconcatenateconstchar*withstd::string,neatlyandelegantly,withoutmultiplefunctioncalls.Ideallyinonefunctioncallandhavetheoutputbeaconstchar*.Isthisimpossible,whatisanoptimumsolution?初始问题到目前为止,我在C++中遇到的最大障碍是它如何处理字符串。在我看来,在所有广泛使用的语言中,它处理字符串的能力最差。我见过其他与此类似的问题,这些问题的答案要么是“使用std::string”,要么只

c++ - 如何连接 "constant strings"和字符?

执行以下操作的“正确方法”是什么?(注意,我还不想将消息输出到屏幕上,数据需要存储在一个变量中。)std::cout>input;std::stringmessage="Today'sprogramwasbroughttoyoubytheletter'"+input+"'.";代码给出了错误消息invalidoperandsoftypesconstchar*andconstchar[3]tobinaryoperator+。我明白为什么会出现此消息。在谷歌搜索解决方案时,出现的结果建议依次将每个项目转换为字符串。但是,如果您必须连接十几个项目,这就变得不切实际了:std::string(

c++ - "unresolved overloaded function type"在 std::function 中有静态函数

尝试将重载静态函数传递给std::function时出现“未解析的重载函数类型”错误。我知道类似的问题,例如this和this.然而,即使那里的答案可以将正确函数的地址放入函数指针中,它们也会因std::function而失败。这是我的MWE:#include#include#includestructClassA{staticstd::stringDoCompress(conststd::string&s){returns;}staticstd::stringDoCompress(constchar*c,size_ts){returnstd::string(c,s);}};voidh

C++ 从 char* 到 char 的无效转换 (char* = *string.begin() )

我有以下代码:std::stringextract(){fstreamopenfile("/home/name/Documents/testfile");std::stringteststring;longlocation=4;longlength=2;teststring.resize(length);char*begin=*teststring.begin();openfile.seekp(location);openfile.read(begin,length);returnteststring;}此代码应该返回在文件中找到的字符串。例如,如果文件的内容是StackOverflo

c++ - "Why switch statement cannot be applied on strings?"的答案是否仍然正确,即使使用 C++11/14?

我遇到了这个问题:Whyswitchstatementcannotbeappliedonstrings?并想知道答案是否:Thereasonwhyhastodowiththetypesystem.C/C++doesn'treallysupportstringsasatype.Itdoessupporttheideaofaconstantchararraybutitdoesn'treallyfullyunderstandthenotionofastring.仍然适用,即使在C++11/14中使用std:string。是否有多个elseif(...)的替代方案?

c++ - boost::shared_ptr<string> 标准集

我有一组boost::shared_ptr,我希望它不是通过共享指针而是通过字符串来排序和唯一化的。我是否必须提供一个新的比较函数来获取共享指针并比较内容,或者已经存在我可以使用的比较器? 最佳答案 这非常具体,因此您可能需要一个自定义比较器。这应该有效:structpointercompare{booloperator()(constboost::shared_ptr&a,constboost::shared_ptr&b){return(*a)>(*b);}} 关于c++-boost:

c++ - 在调用之前检查 std::function 的有效性?

我正在尝试编写一个简单但灵活的事件系统(主要是作为练习,我知道现有的库具有非常好的事件处理程序),但我遇到了一个小绊脚石。如何检查作为委托(delegate)的std::function(可能通过lambda,可能通过std::bind)是否为有效函数/成员函数的对象是否仍然存在在打电话之前?我试过简单地使用std::function的bool运算符,但没有取得任何成功。理想情况下,我希望A.在委托(delegate)函数内部以外的地方进行检查,并且B.当被检查的std::function不是委托(delegate)时,代码仍然有效。有什么想法吗?编辑:这是我运行的测试的源代码#inc

c++ - 为什么 c++ string == (equality) 运算符比手动逐个检查字符快得多?

我在玩C++字符串,发现使用C++字符串==运算符比手动逐个检查字符要快得多:#include#include#includeusingnamespacestd;//assumess1ands2areofsamelengthboolmyEqual(string&s1,string&s2){inti=0;intj=0;while(i输出显示:MyEqual:18==operator:3对于较大的字符串,差异更为显着。我最初认为c++string==operator会做一些与手动逐个比较字符非常相似的事情,但显然它使用了一些优化来显着优于手动方法。c++string==操作符做了哪些优化?

c++ - 从相同的硬编码字符串文字初始化 std::string 和 std::wstring

我正在编写一些单元测试时偶然发现了一个已经成功困扰我几次的场景。我需要生成一些字符串来测试JSON编写器对象。由于作者同时支持UTF16和UTF8输入,所以我想用这两种输入进行测试。考虑以下测试:classUTF8;classUTF16;templatevoidwriteJson(std::map&data){//Writetofile}voidgenerateStringData(std::map&data){data.emplace("Lorem","LoremIpsumissimplydummytextoftheprintingandtypesettingindustry.");