我正在使用一个低级API,它接受char*和数值来分别表示字符串及其长度。我的代码使用std::basic_string并通过适当的转换调用这些方法。不幸的是,这些方法中有许多接受不同大小的字符串长度(即max(unsignedchar)、max(short)等...),我一直在写确保我的字符串实例不超过低级API规定的最大长度的代码。默认情况下,std::basic_string实例的最大长度受限于size_t的最大值(max(unsignedint)或最大值(__int64))。有没有办法操纵std::basic_string实现的特征和分配器实现,以便我可以指定我自己的类型来代替
使用C++将单词(std::string)大写的最快方法是什么?在使用带有-O3标志的g++4.6.3的DebianLinux上,这个使用boost::to_lower的函数将在大约24秒内在AMDPhenom(tm)IIX61090T处理器(3200MHz)。voidCapitalize(std::string&word){boost::to_lower(word);word[0]=toupper(word[0]);}这个使用std::transform的函数在大约10秒内完成同样的事情。我在测试之间清除了VM,所以我不认为这种差异是侥幸:sync&&echo3>/proc/sys/
我非常熟悉C++的大部分内容,但我一直避免使用的一个领域是IO流,主要是因为我一直在不适合它们的嵌入式系统上使用它。然而,最近我不得不熟悉它们,而且我正在努力找出一些我认为应该简单的东西。我正在寻找一种相对有效的方法来将固定数量的字符从C++流读取到std::string中。我可以使用read()方法轻松读取临时char数组并将其转换为std::string,但这相当难看并涉及浪费的拷贝。我还可以使用如下内容将整个流读入字符串:std::stringgetFile(std::fstream&inFile){std::stringstreambuffer;buffer...但是无限制地读
我看过其他几篇关于将QString转换为std::string的帖子,应该很简单。但不知何故,我收到了一个错误。我的代码是使用cmake编译到VS项目中的(我使用的是VSexpress),所以QT库没有问题,我编写的GUI除了这部分之外还可以工作。我有一个QComboBoxcb保存一些对象的名称,还有一个QLineEditlineEdit允许我指定我正在寻找的对象的名称。当我按下开始按钮时,它应该运行一个经过测试和工作的函数,并将来自QComboBox和lineEdit的输入作为参数。下面是点击go按钮时的代码:voidgui::on_go_clicked(){std::strings
假设如下代码:#include#includeintfunc(){return2;}intmain(){std::stringstr("str");str=func();std::cout为什么行str=func();编译时没有类型不匹配的警告?我正在使用设置了-std=c++11标志的编译器gccv.4.7.1。输出:获取的值:'' 最佳答案 std::string类包含一个重载的operator=,它接受一个char值。由于char是整数类型,int可以隐式转换为char。分配给str的值不是空字符串;它是一个长度为1的字符串,
最近我注意到给定std::strings的情况下以下陈述不正确.s.max_size()==s.get_allocator().max_size();我发现这很有趣,默认情况下std::string将使用std::allocator其理论极限为size_type(-1)(是的,我知道我假设2的补码,但这与实际问题无关)。我知道实际限制会比这少得多。在典型的32位x86系统上,内核将占用2GB(可能是1GB)的地址空间,实际上限要小得多。无论如何,GNUlibstdc++的std::basic_string::max_size()似乎返回相同的值,不管它使用的分配器说什么(类似于1073
我能否以某种方式设计我的日志记录函数,使其接受使用C++的以下形式的串联字符串?inti=1;customLoggFunction("MyIntegeri=".customLoggFunction([...]){[...]std::cout编辑:使用std::string作为函数的属性适用于连接字符串,但随后传递的非连接字符串如customLoggFunction("examplestring")会产生编译时错误,指出该函数不适用于char[].当我以下列方式重载函数时...customLoggFunction(std::stringmessage){...}customLoggFun
在C++14程序中,我得到一个类似的字符串std::strings="MyFile####.mp4";和一个0到几百的整数。(它永远不会是一千或更多,但以防万一。)我想用整数值替换“####”,根据需要用前导零匹配'#'字符数。修改s或生成这样的新字符串的巧妙C++11/14方法是什么?通常我会使用char*字符串和snprintf()、strchr()来查找“#”,但我想我应该适应现代并更频繁地使用std::string,但只知道它的最简单用法。 最佳答案 WhatistheslickC++11/14waytomodifysorp
我正在寻找有关转换std::wstring的最佳方法的一些建议至std::string-但在std::map中用作键的快速而肮脏的转换对象。map很大,已经很好集成到项目中了,只有少数几个键需要这样转换,所以我认为把map改成很浪费一个接受std::wstring作为关键。转换的输出并不重要,但它必须保持一致,以便每次都能可靠地从map中提取正确的值。该应用程序是一个仅限Windows的应用程序。是否有任何已知的过程可以为此目的可靠地进行粗略转换?或者最好的方法是通过通常的、适当的转换过程(如SO问题/答案中所述:Howtoconvertwstringintostring?)?编辑:请
如何将CFURLRef转换为C++std::string?我还可以通过以下方式将CFURLRef转换为CFStringRef:CFStringRefCFURLGetString(CFURLRefanURL);但是现在我遇到了同样的问题。如何将CFStringRef转换为std::string? 最佳答案 CFStringRefistollfreebridged到NSString对象,所以如果您以任何方式使用Cocoa或ObjectiveC,转换都非常简单:NSString*foo=(NSString*)yourOriginalCFS