我曾经使用C进行编程,但是现在我需要在项目中使用C ++,并且需要将一些文本保存到字符串中,而我本来会在C中使用的代码已经
sprintf(pathFotosLimpias, "CleanPictures/Picture_T%d_%d", pictureNumber, templateNumber);
或者类似的东西,但是pathFotosLimpias是一个字符串,因此它不起作用,我找不到如何将其保存为字符串的方式,我认为有一个boost函数可以执行与我需要的功能类似的操作,但是我无法弄清楚我应该怎么做,有人可以解释我的需要,也许可以给我一个使用方法的例子吗?
谢谢。
更新:这显然是opencv的cv :: String,我现在更加困惑了。没关系,那是一个错误。
答案 0 :(得分:1)
您可以在C ++中使用std::sprintf()
,类似于在C中使用sprintf()
:
#include <cstdio>
char pathFotosLimpias[...];
std::sprintf(pathFotosLimpias, "CleanPictures/Picture_T%d_%d", pictureNumber, templateNumber);
但是,您应该在C ++中使用std::ostringstream
:
#include <string>
#include <sstream>
std::ostringstream oss;
oss << "CleanPictures/Picture_T" << pictureNumber << "_" << templateNumber;
std::string pathFotosLimpias = oss.str();
答案 1 :(得分:0)
您可以直接添加字符串:
#include <string> //put this at the top
auto path = std::string("CleanPictures/Picture_T") + std::to_string(pictureNumber) + "_" + std::to_string(templateNumber);
(此处"_"
被隐式转换为std::string
)
或使用字符串流:
#include <sstream> //put this at the top
auto stream = std::stringstream{};
stream << "CleanPictures/Picture_T" << pictureNumber << '_' << templateNumber;
auto path = stream.str(); //get the string from the stream
另一种可能性是使用abseil,它可以为printf
提供类型安全的替换:
auto path = absl::StrFormat("CleanPictures/Picture_T%d_%d", pictureNumber, templateNumber);
从所有这些可能性中,我建议:
std::to_string
。