void Draw_line(vector<int> max,int columns) { //画行线
for (int i = 0; i < columns; i++) {
cout << "+-";
for (int j = 0; j <= max[i]; j++) {
cout << '-';
}
}
cout << '+' << endl;
}columns是表格的列数,max中保存的是每一列的最大长度,这里指的是每一个单元格中的元素所占的所有光标数。
例如 1,2,34 所占的是6而不是5,因为34占了两个光标位。
void Draw_Datas(vector<int> max, vector<vector<string>> Str,vector<string> D,int columns,int row) { //显示构造过程,状态转换矩阵
Draw_line(max,columns);
for (int i = 0; i < D.size(); i++) {
cout << "| " << setw(max[i]) << setiosflags(ios::left) << setfill(' ') << D[i] << ' ';
}
cout << '|' << endl;
Draw_line(max, columns);
for (int i = 0; i < row; i++) {
for (int j = 0; j < columns; j++) {
cout << "| " << setw(max[j]) << setiosflags(ios::left) << setfill(' ');
cout << Str[i][j] << ' ';
}
cout << '|'<<endl;
}
Draw_line(max, columns);
}Str中保存的是你要输入的数据,是vector<vector<string>> 类型的
D中保存的是表格的表头元素,依次为每一列的属性值,例如 “I”“Ia”"Ib"
row表示的是数据的行数,注意不包括表头,即每一列的属性值
int main() {
Draw_Datas(max,Str,D,columns,row);
return 0;
}最后设置好你的数据后,在main函数中运行函数Draw_Datas,就可以得到类似下面的结果:

示例1

示例2
最后友情提示,vector<int> max 中保存的一定要是每一列中所占的最大光标数:
例如:
1234
5.54.6
3
Hello
那么这一列的max[i]=6。
如果是中文,那么需要按占两个光标位算。
最后祝大家运算成功,如果有疑问,请在评论区留言,我看到的话,会给大家解惑的。
本文介绍了一个用于绘制表格的C++程序,该程序可以根据输入的数据自动调整表格大小,并展示如何使用这个程序来显示状态转换矩阵。文章详细解释了关键函数Draw_line和Draw_Datas的实现方法。
1099

被折叠的 条评论
为什么被折叠?



