【问题标题】:C++ Function to center text to a given sizeC ++函数将文本居中到给定大小
【发布时间】:2013-09-21 02:07:26
【问题描述】:

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

我们已经了解了 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;

所以你知道,最终真值表的列比我在这里显示的要多得多,但你明白了。

如果有人能告诉我如何创建 cntr 函数,我将不胜感激。它会帮助我完成我的作业,但绝不是为我做作业。 (格式是我的想法,不是作业的一部分。)

你可以在http://skewl.us/truth.php看到我想要做的决赛桌 (我还不够精明,无法添加颜色。)

最后一点:我将在作业中参考这个问题/答案。也就是说,如果有人帮助我,我不会把它当作我的原创作品。

谢谢, ~d

【问题讨论】:

    标签: c++ function formatting


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2022-07-26
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 2020-02-12
      相关资源
      最近更新 更多