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

【描述】

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

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

【输入】

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

【输出】

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


【分析:】

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

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

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

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

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


【代码:】

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; int n;
int num[];
char atl[][]; int main() {
scanf("%d", &n);
for(int i = ; i <= n; i++) {
scanf("%s", atl[i]);
num[i] = strlen(atl[i]);
}
int sum = ;
for(int i = ; i <= n; i++) {
if(sum + num[i] + <= ) {
printf("%s ", atl[i]);
sum = sum + num[i] + ;
continue;
}
if(sum + num[i] <= ) {
printf("%s\n", atl[i]);
sum = ;
continue;
}
sum = ;
printf("\n%s ", atl[i]);
sum = sum + num[i] + ;
}
}

单词排版

from:

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

上一篇:poj 1797 最大最小路段【dijkstra】 (经典)


下一篇:Mac Intellij Debug 模式