考虑先将其写入二维数组后直接输出得到结果
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
while (cin >> str) {
char output[28][28];
for (int i = 0; i < 28; i++) { //初始化二维数组
for (int j = 0; j < 28; j++) {
output[i][j] = ' ';
}
}
int x, y; //x表示输出图形高,y表示输出图形宽
x = (str.length() + 2) / 3; //计算图形的高
y = str.length() - x * 2 + 2; //计算图形的宽
int count = 0; //用来寻找str中字符
for (int i = 0; i < x; i++) {
output[i][0] = str[count++]; //从上往下写入数组
}
for (int i = 1; i < y; i++) {
output[x - 1][i] = str[count++]; //从左往右写入数组
}
for (int i = x - 1; i > 0; i--) {
output[i - 1][y - 1] = str[count++]; //从下往上写入数组
}
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
cout << output[i][j];
}
if (i != x - 1) cout << endl;
}
}
}