思路:
这道题不能想着一个一个输出,要先用一个字符数组把所有内容存取起来再输出。
还有值得注意的地方是要计算列数:int M = (s.length() + N- 1) / N;//得到所需要的列数,且N=1的情况下也成立,当字符数量不能被整除时,加入N-1能补全缺少的一列同时也不会加多一列
具体看代码~~
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
int main()
{
string s;
int N;
cin >> N;
cin.ignore();//忽略上一句输入的换行符
getline(cin, s);
int M = (s.length() + N- 1) / N;//得到所需要的列数,且N=1的情况下也成立
int k = 0;//控制字符的序号
char c[105][15];
for (int i = M - 1; i >= 0; i--)
{
for (int j = 0; j < N; j++)
{
if (k < s.length())
{
c[j][i] = s[k];
k++;
}
else
c[j][i] = ' ';
}
}
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
cout << c[i][j];
}
cout << endl;
}
system("pause");
return 0;
}