如何用C++实现指定文本的矩形边框包裹输出?
给C++输出文本添加矩形边框的实现技巧
问题描述
现有一段C++代码输出指定文本,需要修改代码让这些文本被矩形边框包裹。当前代码如下:
#include <iostream> using namespace std; int main() { cout <<" * Programming Assignment *" << endl; cout <<" * Data Structures *" << endl; cout <<" * Author: Hello World * " << endl; cout <<" * Due Date: September, 7th * " << endl; return 0; }
期望的完整矩形边框包裹效果:
******************************* * Programming Assignment * * Data Structures * * Author: Hello World * * Due Date: September, 7th * *******************************
实现技巧
- 统一文本存储与计算最大宽度
把要输出的文本存入字符串数组,方便批量处理,同时计算出最长文本的长度,以此确定边框的统一宽度。 - 生成顶部/底部边框
根据最长文本的长度,生成由*组成的边框线,长度为「最长文本长度 + 4」(对应每一行前后的*和*共4个额外字符)。 - 对齐输出每一行文本
每一行先打印*,接着输出文本,再用空格填充到最长文本的长度,最后打印*,保证左右边框完全对齐。
修改后的完整代码
#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; int main() { // 存储所有要输出的文本内容 vector<string> lines = { "Programming Assignment", "Data Structures", "Author: Hello World", "Due Date: September, 7th" }; // 找出最长文本的长度 size_t max_len = 0; for (const auto& line : lines) { if (line.size() > max_len) { max_len = line.size(); } } // 打印顶部边框 string border(max_len + 4, '*'); cout << border << endl; // 逐行打印带边框的文本,自动对齐 for (const auto& line : lines) { cout << "* " << line << string(max_len - line.size(), ' ') << " *" << endl; } // 打印底部边框 cout << border << endl; return 0; }
代码说明
- 用
vector<string>存储文本行,便于统一遍历和计算最长长度。 max_len确保所有行的宽度一致,边框和文本块完全匹配。- 填充空格的
string(max_len - line.size(), ' ')解决了原代码中各行长度不一、边框错位的问题。
内容的提问来源于stack exchange,提问作者onix012
相关产品推荐
相关产品推荐

