提问人:Finn 提问时间:11/29/2021 更新时间:11/29/2021 访问量:141
Cpp/C++ 从右到左一行输出
Cpp/C++ Output allingment in one line from right AND left
问:
我需要将右边的整数和左边的字符串写成一行,并让它们正确排列(查看代码下方的输出)。
基本上,我只需要一种方法来仅使用 iostream 和 iomanip 编写表,并将 ints 的 allingment 从 right 更改为 string 和 back。
其他提示也值得赞赏:)
#include <iostream>
#include <iomanip>
using namespace std;
class foo
{
public:
int i;
std::string s;
int j;
foo(int i1,std::string s1,int j1) : i(i1), s(s1),j(j1) {};
};
int main()
{
foo f1(1, "abc",50);
foo f2(100, "abcde",60);
cout << resetiosflags(ios::adjustfield);
cout << setiosflags(ios::right);
cout << setw(6) << "i" << setw(15) << "s" << setw(15) << "j"<<endl;
cout << setw(8) << f1.i << setw(15)
<< resetiosflags(ios::adjustfield) << setiosflags(ios::left) << f1.s <<setw(5)
<< resetiosflags(ios::adjustfield) << setiosflags(ios::right) << setw(15) << f1.j << endl;
cout << setw(8) << f2.i << setw(15)
<< resetiosflags(ios::adjustfield) << setiosflags(ios::left) << f2.s <<setw(5
<< resetiosflags(ios::adjustfield) << setiosflags(ios::right) << setw(15) << f2.j << endl;
/*i s j
1abc 50
100abcde 60*/
return 0;
}
这是输出:
i s j
1abc 50
100abcde 60
这就是我需要的:
i s j
1 abc 50
100 abcde 60
答:
0赞
Retired Ninja
11/29/2021
#1
在同一行中使用 和 不是问题。看起来您遇到的问题是在第一个值之后不允许留出空间。看起来可能是为了这个,但由于它之后没有打印任何东西,所以没有效果。我用 7 来匹配用于字符串宽度的 15 个总数。left
right
setw(5)
也许这样的事情会起作用?最好将幻数提取为常数,这样您就可以在一个地方轻松调整所有常数。您也可以将其包装在一个地方,以将所有格式代码包含在一个地方。operator<<
第一行标题偏移到左边对我来说看起来很奇怪,但它与您的示例相匹配,并且在必要时易于调整。
#include <iostream>
#include <iomanip>
using namespace std;
class foo
{
public:
int i;
std::string s;
int j;
foo(int i1, std::string s1, int j1) : i(i1), s(s1), j(j1)
{};
};
int main()
{
foo f1(1, "abc", 50);
foo f2(100, "abcde", 60);
cout
<< right << setw(7) << "i" << setw(7) << ' '
<< left << setw(15) << "s"
<< right << "j"
<< endl;
cout
<< right << setw(8) << f1.i << setw(7) << ' '
<< left << setw(15) << f1.s
<< right << f1.j
<< endl;
cout
<< right << setw(8) << f2.i << setw(7) << ' '
<< left << setw(15) << f2.s
<< right << f2.j
<< endl;
return 0;
}
输出:
i s j
1 abc 50
100 abcde 60
评论