C++创建文本和变量的字符串

Jac*_*row 40 c++ string variables std

我正在尝试做一些非常简单的事情,然而,经过一个小时的搜索,我找不到合适的答案,所以我必须错过一些相当明显的东西.

我正在尝试动态创建用于ifstream的文件名.虽然我理解可以使用各种方法,但我已经决定创建一个std :: string,并使用stringname.c_str来转换为const.

但问题是我需要使用混合变量和预定义文本值来创建字符串.我收到编译器错误,所以这必须是语法问题.

std::string var = "sometext" + somevar + "sometext" + somevar;
Run Code Online (Sandbox Code Playgroud)

谢谢!

mgi*_*ida 55

你考虑过使用stringstreams吗?

#include <string>
#include <sstream>

std::ostringstream oss;
oss << "sometext" << somevar << "sometext" << somevar;
std::string var = oss.str();
Run Code Online (Sandbox Code Playgroud)

  • 正好 + std::ostringstream 就足够了。 (2认同)

Dav*_*rtz 23

std::string var = "sometext" + somevar + "sometext" + somevar;
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为添加是从左到右执行的"sometext"(第一个)只是一个const char *.它没有operator+打电话.最简单的解决方法是:

std::string var = std::string("sometext") + somevar + "sometext" + somevar;
Run Code Online (Sandbox Code Playgroud)

现在,左到右+操作列表中的第一个参数是a std::string,它有一个operator+(const char *).该运算符生成一个字符串,使链的其余部分工作.

您还可以启用所有操作var,这是一个std::string所有必需的操作符:

var = "sometext";
var += somevar;
var += "sometext";
var += somevar;
Run Code Online (Sandbox Code Playgroud)


Dav*_*nck 20

在C++ 11中,您可以使用std :: to_string:

std::string var = "sometext" + std::to_string(somevar) + "sometext" + std::to_string(somevar);  
Run Code Online (Sandbox Code Playgroud)


Sho*_*ker 7

您还可以使用 sprintf:

char str[1024];
sprintf(str, "somtext %s sometext %s", somevar, somevar);
Run Code Online (Sandbox Code Playgroud)

  • 但这不太安全。确保安全的额外复杂性可能使其不是一个很好的选择。 (3认同)
  • 这并不安全,但与庞大的 std::string 和 ostringstream 相比“太”方便了。 (2认同)

alk*_*ino 5

处理 c++20 的新方法是使用format

#include <format>

auto var = std::format("sometext {} sometext {}", somevar, somevar);
Run Code Online (Sandbox Code Playgroud)