P a r t Part Part 1 1 1 读题
w g y wgy wgy有一个字符串 s s s,他邀请你按照单词在 s s s中的出现顺序将它们全部竖直输出。
单词应该以字符串列表的形式返回,必要时用空格补位,但输出尾部的空格需要删除(不允许尾随空格)。
输入格式
输入字符串 s s s。
输出格式
按照题目要求进行输出。
输入样例1
HOW ARE YOU
输出样例1
HAY
ORO
WEU
输入样例2
TO BE OR NOT TO BE
输出样例2
TBONTB
OEROOE
T
样例说明
题目允许使用空格补位,但不允许输出末尾出现空格,输出样例 2 2 2中字符 T T T后面没有空格
数据范围与提示
1 ≤ ∣ s ∣ ≤ 200 1≤|s|≤200 1≤∣s∣≤200( ∣ s ∣ |s| ∣s∣代表字符串 s s s的长度)且 s s s仅含大写英文字母,保证两个单词之间只有一个空格
P a r t Part Part 2 2 2 思路
本题难度稍大,分析一下样例,实际上就是先把字符串转成二维数组,然后旋转一下输出(记住不能在最后有空格)
先看第一步,如何在输入的时候就转成二维数组。我这里采用~ s c a n f ( ) scanf() scanf()进行输入( s c a n f ( ) ! = E O F scanf()!=EOF scanf()!=EOF也是可以的)。我们可以把一个单词当做一行进行输入,用一个变量来记录行数(下面二维数组的遍历会用到),列我们需要按照输入的长度比出最大值( m a x max max和打擂台两种方法都可以)。也就是如下代码:
while(~scanf("%s",s[++n])){//scanf("%s",s[++n])!=EOF亦可
len=strlen(s[n]);//代表字符串s的长度
mx=max(mx,len);//打擂台亦可
}
但是要注意,我们这里所说的行和列在下面的计算中是需要翻转过来的(第二步需要旋转),也就是如下代码:
//因为要旋转,注意一下判断条件是相反的
for(int i=0;i<mx;i++){
for(int j=1;j<=n;j++){
//此处在下方进行解释
if(s[j][i])cout<<s[j][i];
else cout<<" ";
}
cout<<endl;
}
博主在此处解释一下循环里面的判断条件,原来有内容的输出原有内容,没有的输出空格。
小tip:大家可以先根据思路,写一下代码哦!
P a r t Part Part 3 3 3 代码
#include<bits/stdc++.h>
using namespace std;
char s[205][205];
int n,mx,len;
int main() {
while(~scanf("%s",s[++n])){//scanf("%s",s[++n])!=EOF亦可
len=strlen(s[n]);
mx=max(mx,len);//打擂台亦可
}
for(int i=0;i<mx;i++){
for(int j=1;j<=n;j++){
if(s[j][i])cout<<s[j][i];
else cout<<" ";
}
cout<<endl;
}
return 0;
}
听完后,是不是觉得很简单呢?赶快自己去试一下吧!!!