您的位置:首页 > 编程语言 > C语言/C++

C++ L1-039. 古风排版(如何声明二维动态数组)

2018-03-21 22:26 495 查看

L1-039. 古风排版

  中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。

输入格式:

  输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。

输出格式:

  按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)

输入样例:

4

This is a test case

输出样例:

asa T

st ih

e tsi

ce s

解析:

  这也是水题,不需要解析吧。注意输出格式就行了。初始化为空格比较放心。

  其次就是我用到了二维数组。二维数组声明方法:

/*-------如下方法建立二维数组-------*/
char **p=new char*[m] ;
for(int i = 0; i < m; i++)
p[i] = new char
;
/*-------如下方法释放二维数组-------*/
for(int i = 0; i < m; ++i)
delete[] p[i];
delete []p;


答案:

#include<iostream>
#include<string>
using namespace std;
int main()
{
int line;
string a;
cin>>line;
getchar();
getline(cin,a);
int n,k=0;
/*--------看有几列--------*/
if(a.length()%line==0)
n=a.length()/line;
else
n=a.length()/line+1;
/*------建立二维数组------*/
char **p=new char*[line] ;
for(int i = 0; i < line; i++)
p[i] = new char
;
/*---初始化数组为空格----*/
for(int i=0;i<line;i++)
{
for(int j=0;j<n;j++)
p[i][j]=' ';
}
/*---字符串复制到数组中----*/
for(int i=n-1;i>=0;i--)
{
for(int j=0;j<line;j++)
{
if(k<a.length()) //复制完字符串就可以了……一直k++会出事的
p[j][i]=a[k++];
}
}
/*--------输出--------*/
for(int i=0;i<line;i++)
{
for(int j=0;j<n;j++)
cout<<p[i][j];
cout<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: