1 #include <stdio.h> 2 #include <string.h> 3 #define bool char 4 #define WC 0 5 #define T2B 1 6 #define B2T 2 7 int mode,set; 8 int bline=0,bspace=0,ball=0; 9 int aline=0,aspace=0,aall=0; 10 int getone(void){ 11 int c=getchar(); 12 switch(c){ 13 case '\n': 14 bline++; 15 break; 16 case ' ': 17 bspace++; 18 } 19 if(c!=EOF){ 20 ball++; 21 } 22 return c; 23 } 24 void putone(int c){ 25 switch(c){ 26 case '\n': 27 aline++; 28 break; 29 case ' ': 30 aspace++; 31 } 32 putchar(c); 33 aall++; 34 } 35 int main(){ 36 int tmp,c,i; 37 char first[32]; 38 char* p; 39 bool lead; 40 gets(first); 41 strtok(first," "); 42 switch(first[0]){ 43 case 'w': 44 mode=WC; 45 break; 46 case 't': 47 mode=T2B; 48 break; 49 case 'b': 50 mode=B2T; 51 } 52 if(mode!=WC){ 53 p=strtok(NULL," "); 54 sscanf(p,"%d",&set); 55 } 56 switch(mode){ 57 case WC: 58 while(getone()!=EOF); 59 printf("%d %d %d\n",bline,bspace,ball); 60 return 0; 61 case T2B: 62 lead=1; 63 while((c=getone())!=EOF){ 64 switch(c){ 65 case '\n': 66 putone(c); 67 lead=1; 68 break; 69 case '\t': 70 if(lead){ 71 for(i=1;i<=set;i++){ 72 putone(' '); 73 } 74 }else{ 75 putone(c); 76 } 77 break; 78 case ' ': 79 putone(c); 80 break; 81 default: 82 putone(c); 83 lead=0; 84 } 85 } 86 printf("%d %d %d\n" 87 "%d %d %d\n" 88 ,bline,bspace,ball 89 ,aline,aspace,aall); 90 return 0; 91 case B2T: 92 lead=1,tmp=0; 93 while((c=getone())!=EOF){ 94 switch(c){ 95 case '\n': 96 if(lead){ 97 for(i=1;i<=tmp;i++){ 98 putone(' '); 99 } 100 } 101 putone(c); 102 lead=1,tmp=0; 103 break; 104 case ' ': 105 if(lead){ 106 tmp++; 107 if(tmp==set){ 108 putone('\t'); 109 tmp=0; 110 } 111 }else{ 112 putone(c); 113 } 114 break; 115 case '\t': 116 putone(c); 117 break; 118 default: 119 if(lead){ 120 for(i=1;i<=tmp;i++){ 121 putone(' '); 122 } 123 } 124 putone(c); 125 lead=0,tmp=0; 126 } 127 } 128 printf("%d %d %d\n" 129 "%d %d %d\n" 130 ,bline,bspace,ball 131 ,aline,aspace,aall); 132 return 0; 133 } 134 return 0; 135 }