一.问题
1.题目
小码哥买了一台很神奇的打印机,它能竖直地打印单词,给一个字符串,他能按单词出现的顺序竖直返回单词。
单词应该以字符串列表的形式返回,必要时用空格补位,但输出尾部的空格需要删除(不允许尾随空格)。
必要时以空格补位指的是:在竖直打印单词过程中,若出现中间的单词长度小于相邻两个单词长度,会有某行该单词没有字母的情况,这时用空格补位。
输出尾部空格的删除指的是:输出最后一行的末尾没有空格。
现要求你按照要求复制一个打印机。
2.格式
输入格式:
一行含空格的字符串。
输出格式:
按列输出的字符串(以每行为字符串的形式输出)。
3.样例 1
输入:
CONTEST IS COMING
输出:
CIC OSO N M T I E N S G T
4.备注
1≤s.length≤2001≤s.length≤200,保证两个单词之间只有一个空格,且全是大写字母。
5.本题相关知识点: 算法基础:模拟
6.难度:黄金
二.解题
#include<iostream>
#include<cstring>
int main(){
char arry[200][200],temp[200];
int j=0,max=0;//用j记录用空格隔开的字符串数量,用max记录最大字符串的长度
while(1){
scanf("%s",temp);//每次循环按顺序输入一个用空格隔开的字符串
for(int i=0;i<strlen(temp);i++){
arry[i][j]=temp[i];//字符串每个字母竖着赋值给二维数组
}
j++;//更新字符串数量
max=strlen(temp)>max?strlen(temp):max;//更新每个字符串的最大长度
if(getchar()=='\n'){//当输入为换行时跳出循环
break;
}
}
for(int x=0;x<max;x++){//按行输出字符串,当数组未赋值字符时输出空格
for(int y=0;y<j;y++){
if(arry[x][y]>='A')
printf("%c",arry[x][y]);
else
printf(" ");
}
printf("\n");
}
return 0;
}