【C++题解】[2020普及组模拟题]wgy玩字符串

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 1s200 ∣ 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;
}

听完后,是不是觉得很简单呢?赶快自己去试一下吧!!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值