Questions tagged «stdstring»

std :: string是C ++标准库的基于字节的“字符串”类型,在<string>标头中定义。

16
如何将CString和std :: string std :: wstring相互转换?
CString非常方便,同时std::string与STL容器更兼容。我正在使用hash_map。但是,hash_map不支持将CStrings作为键,因此我想将转换CString为std::string。 编写CString哈希函数似乎需要很多时间。 CString -----&gt; std::string 我怎样才能做到这一点? std::string -----&gt; CString: inline CString toCString(std::string const&amp; str) { return CString(str.c_str()); } 我对吗? 编辑: 这里有更多问题: 如何从转换wstring为CString,反之亦然? // wstring -&gt; CString std::wstring src; CString result(src.c_str()); // CString -&gt; wstring CString src; std::wstring des(src.GetString()); 这有什么问题吗? 此外,我该如何转换std::wstring为std::string,反之亦然?
77 c++  mfc  cstring  stdstring 

3
c ++ integer-> std :: string转换。功能简单吗?
问题:我有一个整数;该整数需要转换为stl :: string类型。 过去,我曾经stringstream做过一次转换,这有点麻烦。我知道C方法是执行sprintf,但是我宁愿使用类型安全的C ++方法。 有一个更好的方法吗? 这是我过去使用过的stringstream方法: std::string intToString(int i) { std::stringstream ss; std::string s; ss &lt;&lt; i; s = ss.str(); return s; } 当然,可以这样重写: template&lt;class T&gt; std::string t_to_string(T i) { std::stringstream ss; std::string s; ss &lt;&lt; i; s = ss.str(); return s; } 但是,我有一个想法,那就是这是一个“重量级”的实现。 Zan指出,该调用非常不错,但是: std::string s = t_to_string(my_integer); …
76 c++  integer  stdstring 

3
如何有效地为std :: string的子字符串获取`string_view`
使用http://en.cppreference.com/w/cpp/string/basic_string_view作为参考,我认为没有办法更优雅地做到这一点: std::string s = "hello world!"; std::string_view v = s; v = v.substr(6, 5); // "world" 更糟糕的是,幼稚的方法是一个陷阱,并留下v了对临时对象的悬挂: std::string s = "hello world!"; std::string_view v(s.substr(6, 5)); // OOPS! 我似乎记得类似的东西,可能在标准库中添加了一个将子字符串作为视图返回的内容: auto v(s.substr_view(6, 5)); 我可以想到以下解决方法: std::string_view(s).substr(6, 5); std::string_view(s.data()+6, 5); // or even "worse": std::string_view(s).remove_prefix(6).remove_suffix(1); 坦白说,我认为这些都不是很好。现在,我能想到的最好的事情就是使用别名来使事情变得不再那么冗长。 using sv = std::string_view; sv(s).substr(6, 5);
76 c++  view  c++17  stdstring 

8
使用std :: string作为缓冲区有不利之处吗?
我最近看到我的一位同事std::string用作缓冲区: std::string receive_data(const Receiver&amp; receiver) { std::string buff; int size = receiver.size(); if (size &gt; 0) { buff.resize(size); const char* dst_ptr = buff.data(); const char* src_ptr = receiver.data(); memcpy((char*) dst_ptr, src_ptr, size); } return buff; } 我猜这家伙想利用返回字符串的自动销毁功能,因此他不必担心释放分配的缓冲区。 这对我来说有点奇怪,因为根据cplusplus.com,该data()方法返回const char*指向由字符串内部管理的缓冲区的指针: const char* data() const noexcept; Memcpying到一个const char指针?AFAIK只要知道我们所做的事情就不会造成伤害,但是我错过了什么吗?这很危险吗?
72 c++  c++11  stdstring 

2
为什么`std :: string :: find()`在失败时不返回结束迭代器?
我发现的行为std::string::find与标准C ++容器不一致。 例如 std::map&lt;int, int&gt; myMap = {{1, 2}}; auto it = myMap.find(10); // it == myMap.end() 但是对于一串, std::string myStr = "hello"; auto it = myStr.find('!'); // it == std::string::npos 为什么不应该失败的myStr.find('!')回报myStr.end(),而不是std::string::npos? 由于std::string与其他容器相比,它有些特殊,所以我想知道这背后是否有真正的原因。(令人惊讶的是,我找不到任何人在任何地方对此进行质疑)。



1
比较std :: string和C样式的字符串文字
假设我有以下代码: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;iomanip&gt; using namespace std; // or std:: int main() { string s1{ "Apple" }; cout &lt;&lt; boolalpha; cout &lt;&lt; (s1 == "Apple") &lt;&lt; endl; //true } 我的问题是:系统如何在这两者之间进行检查?s1是一个对象,同时"Apple"是C样式的字符串文字。 据我所知,无法比较不同的数据类型。我在这里想念什么?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.