文章排版——上机实验,C语言

文章排版——上机实验,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;
}

演示一下运行结果:

也欢迎大家批评指正!!!

发布了25 篇原创文章 · 获赞 9 · 访问量 6209

猜你喜欢

转载自blog.csdn.net/qq_42144047/article/details/86558024