标签: stdstring

连接字符串不能按预期工作

我知道这是一个常见的问题,但是在寻找参考资料和其他材料时,我找不到这个问题的明确答案.

请考虑以下代码:

#include <string>

// ...
// in a method
std::string a = "Hello ";
std::string b = "World";
std::string c = a + b;
Run Code Online (Sandbox Code Playgroud)

编译器告诉我它找不到重载的运算符char[dim].

这是否意味着在字符串中没有+运算符?

但在几个例子中,存在类似这样的情况.如果这不是连接更多字符串的正确方法,那么最好的方法是什么?

c++ string-concatenation standard-library stdstring operator-keyword

84
推荐指数
4
解决办法
22万
查看次数

如何使用嵌入的null构造一个std :: string?

如果我想构造一个std :: string,其行如下:

std::string my_string("a\0b");
Run Code Online (Sandbox Code Playgroud)

我希望在结果字符串中有三个字符(a,null,b),我只得到一个.什么是正确的语法?

c++ null stdstring

82
推荐指数
7
解决办法
4万
查看次数

char*vs cd中的std :: string

std::string什么时候应该使用,什么时候应该char*用来管理charC++中的s 数组?

char*如果性能(速度)至关重要,并且由于内存管理,您愿意接受一些有风险的业务,那么您似乎应该使用它.

是否还有其他需要考虑的方案?

c++ arrays stl stdstring

79
推荐指数
7
解决办法
7万
查看次数

c ++ integer-> std :: string转换.功能简单?

问题:我有一个整数; 这个整数需要转换为stl :: string类型.

在过去,我曾经stringstream做过转换,这有点麻烦.我知道C方式是做一个sprintf,但我宁愿做一个类型安全(呃)的C++方法.

有一个更好的方法吗?

这是我过去使用的字符串流方法:

std::string intToString(int i)
{
    std::stringstream ss;
    std::string s;
    ss << i;
    s = ss.str();

    return s;
}
Run Code Online (Sandbox Code Playgroud)

当然,这可以改写如下:

template<class T>
std::string t_to_string(T i)
{
    std::stringstream ss;
    std::string s;
    ss << i;
    s = ss.str();

    return s;
}
Run Code Online (Sandbox Code Playgroud)

但是,我认为这是一个相当"重量级"的实施.

Zan指出,调用非常好,但是:

std::string s = t_to_string(my_integer);
Run Code Online (Sandbox Code Playgroud)

无论如何,一个更好的方式将是......很好.

有关:

用于将整数转换为字符串C++的itoa()的替代方案?

c++ integer stdstring

76
推荐指数
3
解决办法
11万
查看次数

STL角色特征有​​什么意义?

我注意到在我的SGI STL参考文献中,有一个关于角色特征的页面,但我看不出这些是如何使用的?他们是否替换了string.h函数?它们似乎没有被使用std::string,例如,length()方法on std::string不使用Character Traits length()方法.为什么角色特征存在并且它们是否曾在实践中使用过?

c++ string stl stdstring char-traits

76
推荐指数
1
解决办法
1万
查看次数

如何将CString和:: std :: string :: std :: wstring互相转换?

CString非常方便,同时std::string与STL容器更兼容.我在用hash_map.但是,hash_map不支持CString作为键,所以我想转换CStringstd::string.

编写CString哈希函数似乎需要花费很多时间.

CString -----> std::string
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

std::string -----> CString:

inline CString toCString(std::string const& str)
{
    return CString(str.c_str()); 
}
Run Code Online (Sandbox Code Playgroud)

我对吗?


编辑:

以下是更多问题:

我怎么能转换wstring,CString彼此?

//wstring -> CString,
std::wstring src;
CString result(src.c_str());
//CString->wstring. 
CString src;
::std::wstring des(src.GetString());
Run Code Online (Sandbox Code Playgroud)

什么问题吗?

我怎么能转换std::wstring,std::string彼此?

c++ mfc cstring stdstring

69
推荐指数
5
解决办法
18万
查看次数

如何将字符串向量内嵌到字符串中(优雅的方式)

我正在寻找最优雅的方法将字符串向量内部转换为字符串.以下是我现在使用的解决方案:

static std::string& implode(const std::vector<std::string>& elems, char delim, std::string& s)
{
    for (std::vector<std::string>::const_iterator ii = elems.begin(); ii != elems.end(); ++ii)
    {
        s += (*ii);
        if ( ii + 1 != elems.end() ) {
            s += delim;
        }
    }

    return s;
}

static std::string implode(const std::vector<std::string>& elems, char delim)
{
    std::string s;
    return implode(elems, delim, s);
}
Run Code Online (Sandbox Code Playgroud)

那里还有其他人吗?

c++ string stl stdstring implode

69
推荐指数
12
解决办法
7万
查看次数

使用std :: string作为缓冲区有不利之处吗?

我最近看到我的一位同事std::string用作缓冲区:

std::string receive_data(const Receiver& receiver) {
  std::string buff;
  int size = receiver.size();
  if (size > 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;
}
Run Code Online (Sandbox Code Playgroud)

我猜这家伙想利用返回字符串的自动销毁功能,因此他不必担心释放分配的缓冲区。

这对我来说有点奇怪,因为根据cplusplus.com,data()方法返回const char*指向由字符串内部管理的缓冲区的指针:

const char* data() const noexcept;
Run Code Online (Sandbox Code Playgroud)

Memcpying到一个const char指针?AFAIK只要知道我们所做的事情就不会造成伤害,但是我错过了什么吗?这很危险吗?

c++ stdstring c++11

68
推荐指数
6
解决办法
5812
查看次数

如何有效地为`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"
Run Code Online (Sandbox Code Playgroud)

更糟糕的是,天真的方法是一个陷阱,并留下v暂时的悬挂参考:

std::string s = "hello world!";
std::string_view v(s.substr(6, 5)); // OOPS!
Run Code Online (Sandbox Code Playgroud)

似乎记得有些东西可能会添加到标准库中以返回子字符串作为视图:

auto v(s.substr_view(6, 5));
Run Code Online (Sandbox Code Playgroud)

我可以想到以下解决方法:

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);
Run Code Online (Sandbox Code Playgroud)

坦率地说,我认为这些都不是很好.现在我能想到的最好的事情是使用别名来简化事情.

using sv = std::string_view;
sv(s).substr(6, 5);
Run Code Online (Sandbox Code Playgroud)

c++ view stdstring c++17

64
推荐指数
3
解决办法
5566
查看次数

std :: string :: c_str()和temporaries

以下C++代码是否格式良好:

void consumer(char const* p)
{
  std::printf("%s", p);
}

std::string random_string_generator()
{
  // returns a random std::string object
}

consumer(random_string_generator().c_str());
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,在创建临时std :: string对象并获取c_str()指针后,没有什么能阻止std :: string对象被破坏(或者我错了?).如果代码一切正常,你能指点我的标准吗?当我使用g ++进行测试时,它确实有效.

c++ stl stdstring

56
推荐指数
3
解决办法
7924
查看次数