【openjudge】【字符串】P6374文字排版

【描述】

给一段英文短文,单词之间以空格分隔(每个单词包括其前后紧邻的标点符号)。请将短文重新排版,要求如下:

每行不超过80个字符;每个单词居于同一行上;在同一行的单词之间以一个空格分隔;行首和行尾都没有空格。

【输入】

输入第一行是一个整数n,表示英文短文中单词的数目. 其后是n个以空格分隔的英文单词(单词包括其前后紧邻的标点符号,且每个单词长度都不大于40个字母)。

【输出】

输出排版后的多行文本,每行文本字符数最多80个字符,单词之间以一个空格分隔,每行文本首尾都没有空格。


 

【分析:】

每一个单词的输出格式有三种情况:

  1. 是这一行的第一个单词(当前行字符总数+该单词长度>80)
  2. 是这一行的最后一个单词(当前行字符总数+单词长度=80)
  3. 在这一行中既不是第一个单词也不是最后一个单词(当前行字符总数+单词长度+1<=80)

对于情况1. 在输出单词前先换行

情况2. 输出单词后在换行

情况3. 输出单词后输出空格


 

【代码:】

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 
 6 int n;
 7 int num[2001];
 8 char atl[2001][51];
 9 
10 int main() {
11     scanf("%d", &n);
12     for(int i = 1; i <= n; i++) {
13         scanf("%s", atl[i]);
14         num[i] = strlen(atl[i]);
15     }
16     int sum = 0;
17     for(int i = 1; i <= n; i++) {
18         if(sum + num[i] + 1 <= 80) {
19             printf("%s ", atl[i]);
20             sum = sum + num[i] + 1;
21             continue;
22         }
23         if(sum + num[i] <= 80) {
24             printf("%s\n", atl[i]);
25             sum = 0;
26             continue;
27         }
28         sum = 0;
29         printf("\n%s ", atl[i]);
30         sum = sum + num[i] + 1;
31     }
32 }
单词排版

 

from:

http://noi.openjudge.cn/ch0113/17/

转载于:https://www.cnblogs.com/devilk-sjj/p/8997242.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值