我正在制作一个使用“graphics.h”标题的C ++程序/游戏,我正在尝试创建一个带有图块的地图。有66个瓷砖,每个文件名都不同。我想要显示它们而不必一遍又一遍地写出几乎相同的行。
这是我到目前为止(伪代码):
filename = a + number + b;
readimagefile (filename, left, top, right, bottom);
其中a是“bg(”,后跟1到66之间的数字,然后是b,这是“.bmp”。我希望文件名是这样的:“bg(number).bmp”。但是,我上面的内容显然是错误的语法。
我该怎么做呢?提前感谢您的任何答案。
答案 0 :(得分:5)
std::stringstream str;
str << a << number << b << ".bmp";
然后str.str()
返回一个c ++ std :: string而str.str().c_str()
返回一个'c'类型的字符串
答案 1 :(得分:2)
在C ++ 11中,可以使用to_string
(或to_wstring
)将数字转换为其字符串表示形式。例如,
a + std::to_string(number) + b
(Visual C ++ 2012标准库实现包括to_string
和to_wstring
。)
这比创建std::stringstream
进行格式化更简单(代码更少,更易于阅读)(它的功能也更少,限制更多,但对于像你描述的那样的简单用例,它是足够了)。
或者,Boost.LexicalCast可用于将对象转换为字符串;在内部,它使用std::stringstream
,但它可能针对数字类型和其他类型进行了优化,使用流将是过度杀伤。使用boost::lexical_cast
:
a + boost::lexical_cast<std::string>(number) + b
答案 2 :(得分:1)
for(int i=0; i<66; i++)
{
stringstream stream;
stream << "bg(" << i << ").bmp";
string fileName = stream.str();
}