我试着做一些非常简单的事情,然而,经过一个小时的搜索,我找不到一个合适的答案,所以我一定错过了一些相当明显的东西。
我正在尝试动态创建文件名以供ifstream使用,虽然我知道有很多方法可以实现这一点,但我还是决定创建一个std::string,并使用stringname.c_str将其转换为常量。
然而问题是我需要创建一个混合了变量和预定义文本值的字符串,我得到了编译器错误,所以这一定是语法问题。
伪
std::string var = "sometext" + somevar + "sometext" + somevar;
谢谢!
9条答案
按热度按时间56lgkhnf1#
你考虑过使用字符串流吗?
jm81lzqq2#
在C++11中,您可以使用std::to_string:
ryoqjall3#
这不起作用,因为加法是从左到右执行的,并且
"sometext"
(第一个)只是一个const char *
,它没有operator+
可调用。现在,
+
操作列表中从左到右的第一个参数是一个std::string
,它有一个operator+(const char *)
,这个操作符产生一个字符串,这个字符串使链的其余部分工作。您还可以使所有操作都在
var
上进行,它是std::string
,因此具有所有必要的操作符:osh3o9ms4#
处理c++20的新方法是使用format。
slhcrj9b5#
您也可以使用sprintf:
xqk2d5yq6#
另请参见boost::format:
vh0rcniy7#
你可以这样说:
然后像这样使用它:
宏只是为了避免使用花括号,你也可以使用变量函数,但是
wa7juj8i8#
自c++14起,您可以使用std::string_literals中的std::string操作符
编译器将添加一个std::string来代替文本,因此您可以使用“+”操作符。
v09wglhw9#
你可以用一种简单的方式来做这件事,也像这样:-
cout〈〈某个值〈〈“某个字符串”〈〈某个值〈〈”某个字符串”