【每日练习】需要读题的codeforce5B

题目链接贴上,不多赘述

http://codeforces.com/problemset/problem/5/B

这道题首先是要读懂题,搞清楚题目的指示

即 将文本包围在一个符号*组成圈里面,字符串居中放置,若左右空格长度不一致,由上至下依次靠左再靠右交替

同时,在题目进行左右分隔时,不能采用if,而应该采用?:三目运算符,因为从逻辑上讲,是因为左右不同才需要左右交替,而不是因为左右不同且从上至下是第几个才会导致左右交替,这种小逻辑错误可能导致某些行出现左右对不齐的情况

另外,整理一下几个输入的关系

cin              
输入一个数字
接受一个字符串,遇“空格”、“TAB”、“回车”都结束
cin.get()
cin.get(字符变量名)可以用来接收字符
cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格

cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足

cin.getline()接受一个字符串,可以接收空格并输出,属于istream流
getline()接受一个字符串,可以接收空格并输出,需包含“#include<string>”,getline()属于string流

 

除此之外

注意size()和length()两个函数的区别,牢记这两个函数有着不同的值

面对死循环时

Windows用Ctrl+z强制停止并调试

Linux用Ctrl+D

最后,贴代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=1005;

void outch(int n,char c)  //控制输出字符或空格个数
{
    while(n--)
    {
        cout<<c;
    }
}

int main()
{
    string str[maxn];
    char ctmp[maxn];
    int cnt=0;
    int longest=0;

    while(cin.getline(ctmp,maxn)) //寻找字符串最长长度,确定⭐矩阵的宽度
    {
        str[cnt]=ctmp;
        if(str[cnt].length()>longest)
        {
            longest=str[cnt].length();
        }
        cnt++;
    }

    int flag=0; //确定是从上到下第几个,从而决定靠右还是靠左
    int left,right;

    outch(longest+2,'*');
    cout<<endl;
    for(int i=0;i<cnt;i++)
    {
        left=(longest-str[i].length())/2;
        right=longest-left-str[i].length();
        if(left!=right)
        {
            left+=(flag%2==0?0:1);
            right-=(flag%2==0?0:1);
            flag++; //由于整型计算的性质,其天然靠左

        }
        cout<<'*';
        outch(left,' ');
        cout<<str[i];
        outch(right,' ');
        cout<<'*'<<endl;
    }
    outch(longest+2,'*');
    cout<<endl;

    return 0;
}

参考引用

https://blog.csdn.net/aholic/article/details/25920733

https://www.cnblogs.com/luolizhi/p/5746775.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值