在这里我使用了string数组,把最终输出一行一行地放在这个数组中。然后一列一列地向其中添加元素(字符和空格),保证在同一水平线上。
ps.我特别处理了一下只有输出一行的情况。(面向测试用例编程了哈哈哈)
输入输出实例:
代码如下:
#include <iostream>
using namespace std;
void printz(string* zlist, int len) {
for (int i = 0; i < len; i++)
{
cout << zlist[i] << endl;
}
}//这个方法用来打印数组
void fillblank(string * zlist, int rownow, int colnow, int N) {
bool finderror = false;
for (int i = 0; i < N; i++)
{
if(i != rownow)
zlist[i] += " ";
if (zlist[i].size() != zlist[rownow].size())
finderror = true;
if (colnow != zlist[rownow].size() - 1)
cout << "colume error!!!" << endl;
}
if (finderror)
cout << "fillblank error!!!" << endl;
}//填充数组
int main() {
string str;
int N = 0;
cin >> str; //字符串长度为[1,64]
cin >> N; //0 < N <= 20
if (N == 1) {
cout << str << endl;
return 0;
}
string zlist[21];
int rownow = 0;
int colnow = 0;
bool turn = false;
for (int i = 0; i < str.size(); i++)
{
zlist[rownow] += str.at(i);
if (zlist[0].size() != zlist[rownow].size()) {
fillblank(zlist, rownow, colnow, N);
}
if (!turn)
rownow++;
else{
rownow--;
colnow++;
}
if (rownow == N - 1)
turn = true;
if (i != 0 && rownow == 0)
turn = false;
}
printz(zlist, N);
}