结构化输出
Structured output
我最近开始用c ++编程,遇到了一个小问题。如果我希望我的输出是结构化的(假设每一行都以名称开头,然后是一个数字),以便名称正常写入屏幕(每个名称的每个首字母都从每个新行的开头开始),并且我希望后面的数字排列在一列中, 我该怎么做?我希望程序输出如下所示:
Gary 0
LongName 0
VerylongName 0
我希望我的程序以上述方式打印一些东西,但名称长度不同(在这种情况下,"0"排列在一列中)。
尝试以下操作:如果您知道要打印的所有名称的最大长度(例如 20),请使用 C++ I/O 操纵器设置输出的宽度(和左对齐)。 这将强制输出占用max
字符。
代码片段:
#include <iostream>
#include <iomanip>
...
// for each entry
std::cout << std::setw(20) << std::left << "Gary" << 10 << "n";
...
std::cout << std::flush;
以下是更多信息...
我在这里在黑暗中拍摄,因为你没有真正包含太多信息......但是,您可以执行此操作的一种方法是确保创建带有名称周围填充的列 - 并且不必担心数字。 Formatted output
C 比 C++ 有优势的一种情况(恕我直言)。 在C++中,您还可以使用如下所示的内容来执行此操作:
cout << setw(15) << name << number << "n";
如果您提前计算出您拥有的名称的最大长度并添加 4,则可以获得奖励积分。
不在
C++标准库中,但仍然值得一提:boost::format。它将允许您编写类似 printf 的格式字符串,同时仍然是类型安全的。
例:
#include <boost/format.hpp>
#include <iostream>
#include <string>
struct PersonData
{
std::string name;
int age;
};
PersonData persons[] =
{
{"Gary", 1},
{"Whitney", 12},
{"Josephine ", 101}
};
int main(void)
{
for (auto person : persons)
{
std::cout << boost::format("%-20s %5i") % person.name % person.age << std::endl;
}
return 0;
}
输出:
Gary 1
Whitney 12
Josephine 101
struct X
{
const char *s;
int num;
} tab[] = {
{"Gary",1},
{"LongName",23},
{"VeryLongName",456}
};
int main(void)
{
for (int i = 0; i < sizeof(tab) / sizeof(struct X); i++ )
{
// C like - example width 20chars
//printf( "%-20s %5in", tab[i].s, tab[i].num );
// C++ like
std::cout << std::setw(20) << std::left << tab[i].s << std::setw(5) << std::right << tab[i].num << std::endl;
}
getchar();
return 0;
}
相关文章:
- 在基于范围的for循环中使用结构化绑定声明
- 使用结构化绑定'Reflection'
- 为什么结构化绑定不使用"auto&"返回对结构成员的引用,而是返回成员本身
- 为什么 boost::comb 对结构化绑定的支持缺少结构化绑定机制对 boost::tuples::cons 的适应?
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- 在 C++14 中手动实现结构化绑定
- 为什么结构化绑定不支持可变数组?
- 为<vtkDataArray> VTK 非结构化网格声明 vtkSmartPointer 类型的变量时出现问题
- 在只读(即 const)访问器上执行结构化绑定的最佳实践是什么?
- 是否有像ADTF2这样的结构化属性?
- 如何使用函数的输出初始化 const 数组结构字段?
- 带有 std::minmax 和 rvalues 的结构化绑定
- 在无序映射的结构化绑定中推导类型
- 为什么基于范围的 for 循环中的结构化绑定只是一个副本而不是引用?
- 您自己的类型的结构化绑定,不是结构或元组(通过公共成员函数)
- 共享或私有 openmp 代码中的结构化类型变量
- 结构化绑定:遍历元组的双端面
- C++ 如何将结构化 git 日志的输出解析为对象
- 结构化输出
- 输出继承的结构化列表