C++ 如何对齐不同长度的输出C++;
我已经试着搜索了很多关于这个的帖子,但我仍然无法找到答案。假设我有一个循环,它从文本文件中读取行,然后在屏幕上显示它们。我希望每个数据点都对齐,但问题是数据的长度可能不同,因此在setw中使用静态值是不起作用的。 例如,这里有一个文本文件C++ 如何对齐不同长度的输出C++;,c++,io,alignment,console-application,C++,Io,Alignment,Console Application,我已经试着搜索了很多关于这个的帖子,但我仍然无法找到答案。假设我有一个循环,它从文本文件中读取行,然后在屏幕上显示它们。我希望每个数据点都对齐,但问题是数据的长度可能不同,因此在setw中使用静态值是不起作用的。 例如,这里有一个文本文件 000000 apples pears 2.00 000001 oranges bannana 1.00 这就是我希望它在屏幕上的显示方式,但我的屏幕是这样的 000000 apples pears 2.
000000 apples pears 2.00
000001 oranges bannana 1.00
这就是我希望它在屏幕上的显示方式,但我的屏幕是这样的
000000 apples pears 2.00
000001 oranges banana 1.00
它看到桔子比苹果长1,然后它把它移到左边1。香蕉和梨也是一样
如何像第一个示例一样对齐它(这是它在文本文件中的外观)
这就是我正在使用的:
cout << account << setw(10) << fruit << setw(10) << fruit2 << setw(10) << money << endl;
cout如果您使用的是std::string,下面是我如何解决这个问题的:
cout << left << setw(10) << account << setw(10) << fruit << setw(10 + strlen(fruit2.c_str()) - strlen(fruit.c_str())) << fruit2 << endl;
这没有什么意义——如果你真的得到了这个结果,听起来你的编译器有问题。我写了一个很好的演示,类似于你在问题中所做的:
#include <iostream>
#include <iomanip>
#include <string>
#include <iterator>
struct account {
std::string acct;
std::string fruit;
std::string fruit2;
double qty;
friend std::ostream &operator<<(std::ostream &os, account const &a) {
return os << a.acct << std::setw(10)
<< a.fruit << std::setw(10)
<< a.fruit2 << std::setw(5)
<< a.qty;
}
};
int main() {
account accts[] = {
{ "0000", "apples", "pears", 2.0 },
{ "0001", "oranges", "banana", 1.0 }
};
std::copy_n(accts, 2, std::ostream_iterator<account>(std::cout, "\n"));
}
每个项在其字段中都是右对齐的,正如您从规范中所期望的那样。您只是缺少std::ios\u base::left标志
std::cout << std::setw(10) << std::setiosflags(std::ios_base::left)
<< "x" << "y" << std::endl;
<代码> STD::CUT考虑使用我不能使用Boost,因为它不能有额外的库,然后考虑使用<代码> Prtff。
0000 apples pears 2
0001 oranges banana 1
std::cout << std::setw(10) << std::setiosflags(std::ios_base::left)
<< "x" << "y" << std::endl;