《The C Programming Language》 1-22

来源:互联网 发布:ubuntu apt get glib 编辑:程序博客网 时间:2024/05/01 23:44


该程序还添加了删除每一行开头空格的功能:  

例如:输入:abcd/tehghjk,

                   输出:abcd

                           ehghjk

 

                   输入:abc def ghk

                   输出:abc def

                           ghk

 

                   输入:abc            fekgl(中间有7个空格)

                   输出:abc

                           fekgl


#include <stdio.h>

 #define MAXLINE 1000
 #define STEP 10 //以10个字符为一段 
 int getLine(char line[],int maxline);
 void process(char line[],int len);
 int main(int argc, char *argv[])
 {
     char line[MAXLINE];
     int len;
     int i,j,k,l;//循环计数变量 
     int partCount;
     int flag=0;
     while((len=getLine(line,MAXLINE))>0)
     {
         if(len<=STEP)
             partCount=len;
         else
             partCount=STEP;
 
         for(i=0; i<len; i++)
         {
 
             if((i+1)%partCount==0||flag==1)
             {
                 j=i;
                 int startIndex=j-(partCount-1);
                 int first=0;
                 for(k=startIndex; k<=j; k++) //查找每一组分段中首个非空字符的位置
                 {
                     if(line[k]!=' '&&line[k]!='\t')
                     {
                         first=k;
                         break;
                     }
                 }
                 int lastSpace=j;
                 for(k=j; k>=startIndex; k--)//查找每组分段中最后一个空格的位置。
                 {
                     if(line[k]==' '||line[k]=='\t')
                     {
                         lastSpace=k;
                         break;
                     }
                 }
                 if(lastSpace>first&&lastSpace!=j)//将每段中最后一个空格变为换行,如果有空格的话
                     line[lastSpace]='\n';
                 for(l=first; l<=j; l++)//输出每段中从第一个非空格到最后一个字符之间的字符
                 {
                     putchar(line[l]);
                 }
                 putchar('\n');
             }
             if(i==(len-len%partCount))//如果 剩下的字符长度达不到分段的长度。
             {
                 partCount=len-i;
                 i=len-2;
                 flag=1;//使下一轮循环进入上一个if中。
             }
 
         }
     }
     return 0;
 }
 
 int getLine(char line[],int maxline)
 {
     int c;
     int i;
     for(i=0; i<maxline&&(c=getwchar())!=EOF&&c!='\n'; ++i)
     {
         line[i]=c;
     }
     if(c=='\n')
         line[i]=c;
     return i;
 
 }
原创粉丝点击