《The C Programming Language》 1-22

以下代码还添加了删除每一行开头空格:  

例如:输入:abcd/tehghjk,

                   输出:abcd

                           ehghjk

 

                   输入:abc def ghk

                   输出:abc def

                           ghk

 

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

                   输出:abc

                           fekgl

 1 #include <stdio.h>
2 #define MAXLINE 1000
3 #define STEP 10 //以10个字符为一段
4 int getLine(char line[],int maxline);
5 void process(char line[],int len);
6 int main(int argc, char *argv[])
7 {
8 char line[MAXLINE];
9 int len;
10 int i,j,k,l;//循环计数变量
11 int partCount;
12 int flag=0;
13 while((len=getLine(line,MAXLINE))>0)
14 {
15 if(len<=STEP)
16 partCount=len;
17 else
18 partCount=STEP;
19
20 for(i=0; i<len; i++)
21 {
22
23 if((i+1)%partCount==0||flag==1)
24 {
25 j=i;
26 int startIndex=j-(partCount-1);
27 int first=0;
28 for(k=startIndex; k<=j; k++) //查找每一组分段中首个非空字符的位置
29 {
30 if(line[k]!=' '&&line[k]!='\t')
31 {
32 first=k;
33 break;
34 }
35 }
36 int lastSpace=j;
37 for(k=j; k>=startIndex; k--)//查找每组分段中最后一个空格的位置。
38 {
39 if(line[k]==' '||line[k]=='\t')
40 {
41 lastSpace=k;
42 break;
43 }
44 }
45 if(lastSpace>first&&lastSpace!=j)//将每段中最后一个空格变为换行,如果有空格的话
46 line[lastSpace]='\n';
47 for(l=first; l<=j; l++)//输出每段中从第一个非空格到最后一个字符之间的字符
48 {
49 putchar(line[l]);
50 }
51 putchar('\n');
52 }
53 if(i==(len-len%partCount))//如果 剩下的字符长度达不到分段的长度。
54 {
55 partCount=len-i;
56 i=len-2;
57 flag=1;//使下一轮循环进入上一个if中。
58 }
59
60 }
61 }
62 return 0;
63 }
64
65 int getLine(char line[],int maxline)
66 {
67 int c;
68 int i;
69 for(i=0; i<maxline&&(c=getwchar())!=EOF&&c!='\n'; ++i)
70 {
71 line[i]=c;
72 }
73 if(c=='\n')
74 line[i]=c;
75 return i;
76
77 }



posted @ 2012-03-11 02:59  flyice  阅读(156)  评论(0)    收藏  举报