文章排版——上机实验,C语言
——————————————————————————————————————
题目:
把一段文章按要求排版。文章的输入方式为:由键盘输入一段以
回车符结束的文章(最大长度 2000 个字符)。排版时以单词为基本
单位。单词由不含空格的任意字符组成,是长度小于 20 个字符的串。
空格符是分隔单词的唯一字符,在输入时连续的空格符在处理时应先
化简为单个空格符。在排版前应先输入,排版后每行的字符数为N,
排版后将整理好的文章按行输出。输出时不能将一个完整的单词截
断,并要求输出的总行数最小。将每个不足N个字符的行用空格补足,
填充空格符的方式有以下三种。
1)将填充的空格符置于每行的末尾,并要求每行的起始为单词。
2)将填充的空格符置于每行的开始,并要求每行的末尾为单词。
3)将填充的空格符平均分配在每行中,并保证行的起始和末尾
均为单词。
——————————————————————————————————————
算法过程:
下面的这段代码是是按照原则1)填充空格的,具体过程是:先找全一个完整的单词,然后在把这个单词打印到当前一行的原则是先用一个变量len存放当前行的长度,len+新单词长度若超过限制长度就打印到下一行,否则就继续······
---------------------
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 25 //定义每一行的字符数,可修改
int main()
{
char atc[200]; //用于存放中的字符数,其长度可修改为2000
char word[20]={1}; //用于存放“单词”单词长度不得大于20个字符
int i=0,j=0,k;
int len=0; //用于判断是否达到换行的条件
printf("please input the article:\n");
gets(atc); //从键盘获得一个字符串
k=strlen(atc); //及下面两条用于对字符串做特殊处理
atc[k]=' ';
atc[k+1]='\0';
printf("After transfer:\n");
while(atc[i]!='\0')
{
if(atc[i]!=' ') //判断是否为空格,若不是把字符放到单词数组里
{
word[j]=atc[i];
i++; //刷新
j++;
}
else //执行于此说明单词的字符已找全
{
len+=j;
if(len>N) //判断是否要换行
{
len=j;
printf("\n");
}
if(word[0]!=1)
{
for(k=0;k<j;k++) //打印出单词
{
printf("%c",word[k]);
word[k]=1;
}
printf(" "); //单词之间用空格分开
len++;
j=0;
}
i++; //刷新
}
}
return 0;
}
演示一下运行结果:
也欢迎大家批评指正!!!