gpt4 book ai didi

c++ - 如何使用参数集合格式化 std::string?

转载 作者:IT老高 更新时间:2023-10-28 22:26:40 46 4
gpt4 key购买 nike

是否可以格式化 std::string 传递一组参数?

目前我正在以这种方式格式化字符串:

string helloString = "Hello %s and %s";
vector<string> tokens; //initialized vector of strings
const char* helloStringArr = helloString.c_str();
char output[1000];
sprintf_s(output, 1000, helloStringArr, tokens.at(0).c_str(), tokens.at(1).c_str());

但是 vector 的大小是在运行时确定的。是否有任何类似于 sprintf_s 的函数,它接受参数集合并格式化 std::string/char*?我的开发环境是 MS Visual C++ 2010 Express。

编辑:我想实现类似的目标:

sprintf_s(output, 1000, helloStringArr, tokens);

最佳答案

实现类 sprintf 功能的最 C++ 风格的方法是使用 stringstreams .

这是一个基于您的代码的示例:

#include <sstream>

// ...

std::stringstream ss;
std::vector<std::string> tokens;
ss << "Hello " << tokens.at(0) << " and " << tokens.at(1);

std::cout << ss.str() << std::endl;

很方便,不是吗?

当然,您可以充分利用 IOStream 操作来替换各种 sprintf 标志,请参阅此处 http://www.fredosaurus.com/notes-cpp/io/omanipulators.html供引用。

一个更完整的例子:

#include <string>
#include <sstream>
#include <iostream>
#include <iomanip>

int main() {
std::stringstream s;
s << "coucou " << std::setw(12) << 21 << " test";

std::cout << s.str() << std::endl;
return 0;
}

打印:

coucou           21 test

编辑:

正如 OP 所指出的,这种处理方式不允许使用可变参数,因为没有预先构建的"template"字符串允许流遍历 vector 并根据占位符插入数据。

关于c++ - 如何使用参数集合格式化 std::string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5076472/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com