两种方法,第一是先把字符串变成字符数组,第二是把字符串直接输出
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int n;
string s;
cin >> n;
getchar();
getline(cin, s);
char str[2010][2010];
memset(str, ' ', sizeof str);//初始化为空格,很重要,就避免了输出空格的问题
int num, k = 0;
num = s.size() / n + (s.size() % n == 0 ? 0 : 1); //确定列数,不能整除就会多出来一列
for (int i = num - 1; i >= 0; i--) //读入字符
for (int j = 0; j < n; j++)
if (k < s.size())
str[j][i] = (s[k++]);
for (int i = 0; i < n; i++) { //输出字符
for (int j = 0; j < num; j++)
cout << str[i][j];
cout << endl;
}
}
直接输出有点麻烦
#include <iostream>
using namespace std;
int main() {
int n;
string s, c;
cin >> n;
getchar()
getline(cin, s);
int x = s.size(), j = x / n * n;
for (int i = 0; i < n; i++) {
j += i;
for (; j >= 0; j -= n) { //按照规律向右每次-n
if (j < x) {
cout << s[j];
} else {
if (x % n != 0) //不能整除,说明有一列会有多余的字符,需要用空格填充
cout << " ";//很巧妙的解决了空格的问题,我写的只能过4分
}
}
j = x / n * n; //回复j的值
cout << endl;
}
return 0;
}