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

yrwegjxp  于 2022-12-30  发布在  其他
关注(0)|答案(9)|浏览(324)

我试着做一些非常简单的事情,然而,经过一个小时的搜索,我找不到一个合适的答案,所以我一定错过了一些相当明显的东西。
我正在尝试动态创建文件名以供ifstream使用,虽然我知道有很多方法可以实现这一点,但我还是决定创建一个std::string,并使用stringname.c_str将其转换为常量。
然而问题是我需要创建一个混合了变量和预定义文本值的字符串,我得到了编译器错误,所以这一定是语法问题。

std::string var = "sometext" + somevar + "sometext" + somevar;

谢谢!

56lgkhnf

56lgkhnf1#

你考虑过使用字符串流吗?

#include <string>
#include <sstream>

std::ostringstream oss;
oss << "sometext" << somevar << "sometext" << somevar;
std::string var = oss.str();
jm81lzqq

jm81lzqq2#

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

std::string var = "sometext" + std::to_string(somevar) + "sometext" + std::to_string(somevar);
ryoqjall

ryoqjall3#

std::string var = "sometext" + somevar + "sometext" + somevar;

这不起作用,因为加法是从左到右执行的,并且"sometext"(第一个)只是一个const char *,它没有operator+可调用。

std::string var = std::string("sometext") + somevar + "sometext" + somevar;

现在,+操作列表中从左到右的第一个参数是一个std::string,它有一个operator+(const char *),这个操作符产生一个字符串,这个字符串使链的其余部分工作。
您还可以使所有操作都在var上进行,它是std::string,因此具有所有必要的操作符:

var = "sometext";
var += somevar;
var += "sometext";
var += somevar;
osh3o9ms

osh3o9ms4#

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

#include <format>

auto var = std::format("sometext {} sometext {}", somevar, somevar);
slhcrj9b

slhcrj9b5#

您也可以使用sprintf:

char str[1024];
sprintf(str, "somtext %s sometext %s", somevar, somevar);
xqk2d5yq

xqk2d5yq6#

另请参见boost::format

#include <boost/format.hpp>

std::string var = (boost::format("somtext %s sometext %s") % somevar % somevar).str();
vh0rcniy

vh0rcniy7#

你可以这样说:

#define Compose(...) ComposeFn({ __VA_ARGS__ })

std::string ComposeFn(std::initializer_list<std::string> strList) {
    std::ostringstream ss;
    for(std::string str : strList) {
        ss << str;
    }
    return ss.str();
}

然后像这样使用它:

int errcode = 404;
std::cout << Compose("[ERROR]: (", errcode, ") doesn't exist") << std::endl;

宏只是为了避免使用花括号,你也可以使用变量函数,但是

wa7juj8i

wa7juj8i8#

自c++14起,您可以使用std::string_literals中的std::string操作符

#include <string>
using namespace std::string_literals;
std::string var = "sometext"s + somevar + "sometext"s + somevar;

编译器将添加一个std::string来代替文本,因此您可以使用“+”操作符。

v09wglhw

v09wglhw9#

你可以用一种简单的方式来做这件事,也像这样:-
cout〈〈某个值〈〈“某个字符串”〈〈某个值〈〈”某个字符串”

相关问题