c++ - C++ 函数将文本居中至给定大小

  显示原文与译文双语对照的内容
89 0

我在学校 4th 周,我们正在完成我的PHP类和JavaScript类中已经完成的真实表。 到目前为止,我们只学习了输出( 我们正在做控制台应用程序) 。

我们已经了解了 setw ( ),但是我希望把我的文本集中在一个自制的。 可以告诉我如何编写输入字符串的函数和字段的总大小并返回该字段中的字符串。


Example output I'm trying to generate:
+---+---+----+----+--------+--------+
| x | y |!x |!y | x && y | x || y |
+---+---+----+----+--------+--------+
| T | T | F | F | T | T |
+---+---+----+----+--------+--------+
| T | F | F | T | F | T |
+---+---+----+----+--------+--------+

Example code I want to use:

#include <iostream>
#include <string>
using namespace std;

...

//Declare Constants and Variables
const char *COL1HDR ="x";
const int COL1SZ = strlen(COL1HDR) + 2;//2 for padding L & R
const char *COL2HDR ="y";
const int COL2SZ = strlen(COL2HDR) + 2;
const char *COL3HDR ="!x";
const int COL3SZ = strlen(COL3HDR) + 2;
const char *COL4HDR ="!y";
const int COL4SZ = strlen(COL4HDR) + 2;
const char *COL5HDR ="x && y";
const int COL5SZ = strlen(COL5HDR) + 2;
const char *BOXPART ="+---+---+----+----+--------+--------+";
char c1a[COL1SZ+1], c2a[COL2SZ+1], c3a[COL3SZ+1],
 c4a[COL4SZ+1], c5a[COL5SZ+1];//Will hold 'T', 'F' or Header
bool x, y;//two variables for the truth table
bool a//Boolean placeholder for the logic result

//Build Header Row
c1a = cntr(COL1HDR, COL1SZ);
c2a = cntr(COL2HDR, COL2SZ);
c3a = cntr(COL3HDR, COL3SZ);
c4a = cntr(COL4HDR, COL4SZ);
c5a = cntr(COL5HDR, COL5SZ);


//Display header of table
cout <<BOXPART <<endl;
cout <<"|" <<c1a <<"|" <<c2a <<"|" <<c3a <<"|" <<c4a <<"|" <<c5a <<"|n";
cout <<BOXPART <<endl;

//Calculate first row of table
x = 1;//0 = False, 1= True
y = 1;
a = x ; c1a = (a)? 'T' : 'F'; c1a = cntr(c1a, COL1SZ);
a = y; c2a = (a)? 'T' : 'F'; c2a = cntr(c2a, COL2SZ);
a =!x ; c3a = (a)? 'T' : 'F'; c3a = cntr(c3a, COL3SZ);
a =!y; c4a = (a)? 'T' : 'F'; c4a = cntr(c4a, COL4SZ);
a = x && y; c5a = (a)? 'T' : 'F'; c5a = cntr(c5a, COL5SZ);

//Display first row of table
cout <<"|" <<c1a <<"|" <<c2a <<"|" <<c3a <<"|" <<c4a <<"|" <<c5a <<"|n";
cout <<BOXPART <<endl;

所以你知道,final 真实表有许多列比我在这里显示的更多,但是你得到了。

如果有人能告诉我如何 crete cntr函数,我将非常感激。 这将帮助我完成我的作业,但是无法为我做我的作业。 ( 格式是我的想法,而不是作业的一部分。)

你可以看到我正在尝试执行的final 表: ( 我还没有足够的时间来添加颜色) 。

一个 final 注意:我将在作业中引用这个问题/答案。 也就是说,如果有人帮助我,我不会把它作为我原来的工作。

谢谢,~d

时间: 原作者:

136 1

始终可以将字符串"补白",直到它到达中心:


string Pad(string StringToPad, int Amount, string PadChars, bool Left)
{
 string Temp;
 for (std::size_t I = Amount; I> StringToPad.size(); --I)
 Temp += PadChars;

 return (Left? (Temp + StringToPad) : (StringToPad + Temp));
}

当然,如果速度是一个因素,那么你可以将这个临时字符串交换为 std::stringstream

原作者:
...