C ++我应该使用什么来保存格式化为sprintf()这样的字符串变量的格式?

时间:2018-07-28 22:36:05

标签: c++ string opencv formatting printf

我曾经使用C进行编程,但是现在我需要在项目中使用C ++,并且需要将一些文本保存到字符串中,而我本来会在C中使用的代码已经

sprintf(pathFotosLimpias, "CleanPictures/Picture_T%d_%d", pictureNumber, templateNumber);

或者类似的东西,但是pathFotosLimpias是一个字符串,因此它不起作用,我找不到如何将其保存为字符串的方式,我认为有一个boost函数可以执行与我需要的功能类似的操作,但是我无法弄清楚我应该怎么做,有人可以解释我的需要,也许可以给我一个使用方法的例子吗?

谢谢。

更新:这显然是opencv的cv :: String,我现在更加困惑了。没关系,那是一个错误。

2 个答案:

答案 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);

从所有这些可能性中,我建议:

  1. 如果您担心类型安全,请使用字符串流。
  2. 如果需要更多性能更好的代码,请使用std::to_string
  3. 如果您担心类型的安全性和性能,请使用 abseil