使用递增的整数 C++ 格式化字符串
formatting string with incrementing integer c++
有没有一种快速的方法可以在不重复i++
的情况下执行以下操作
int i = 0;
printf("foo-%d,blah-%d,orange-%d", i++, i++, i++);
我需要用 8 对或更多对来做到这一点,代码看起来很糟糕。.
参数的计算顺序未指定。此外,如果没有干预序列点,则不能对变量进行两次修改。所以这样做:
printf("foo-%d,blah-%d,orange-%d", i, i+1, i+2);
i+=3;
由于您可以拥有 8 对或更多对,因此我建议您使用更具可读性和易于扩展的版本:
std::vector<std::string> vec_values = {"foo", "blah", "orange"};
for (size_t index = 0; index < vec_values.size(); ++index)
std::cout << vec_values[index] << "-" << index;
您可能会根据前缀而不是数字来考虑它:
int i = 0;
std::vector<std::string> prefixes { "foo", "bar", "baz", "ham" };
bool first = false;
for (const auto& prefix : prefixes) {
if (!first)
std::cout << ',';
std::cout << prefix << '-' << i++;
first = false;
}
如果不能使用 C++11 基于范围的for
,可以完整写出来:
for (auto prefix = prefixes.begin(); prefix != prefixes.end(); ++prefix) {
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (!first)
std::cout << ',';
std::cout << *prefix << '-' << i++;
// ~~~~~~~
first = false;
}
或者,使用索引:
for (i = 0; i < prefixes.size(); ++i) {
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (!first)
std::cout << ',';
std::cout << prefixes[i] << '-' << i;
// ~~~~~~~~~~~ ~
first = false;
}
相关文章:
- C++格式化输出问题
- 格式化浮点值:返回默认值
- 自动格式化程序> >更改为>>
- 如何从C++中的格式化字符串派生整数?
- 将从格式化文本文件读取的文本数据存储到链表
- 在不使用系统的情况下从C++应用程序格式化 Linux 中的 SD 卡
- 高精度双精度的 Sprintf 格式化问题
- 如何在 c++ 中格式化和访问 2D 矢量数组中的数据
- 叮当格式化程序多行格式配置错误
- 如何格式化我的文本文件以使其不会一遍又一遍地重复同一行?
- 从函数(不抛出函数)返回异常以进行消息格式化?
- 从格式化输入操作中获取读取字符数
- 如何从标准输入中检测格式化输入错误?
- 无法从 spdlog 中格式化参数
- 格式化时间 c++ dd/mm/yyyy hh:ss.
- 如何正确格式化csv文件?
- 格式化sqlite3_exec结果
- 使用 std::locale 格式化法语数字时无效的 UTF-8 数据
- C++逐步格式化字符串
- 如何使用 clang 格式格式化地图初始化?