C語言實例解析精粹學習筆記——29
阿新 • • 發佈:2018-09-24
r+ 函數 復制 printf bsp 不同 getch 多余 個數
題目:
將字符行內單字之間的空格平均分配插入到單字之間,以實現字符行排版。也就是輸入一個英文句子,單詞之間的空格數目不同,將這些空格數平均分配到單詞之間,重新輸出。
代碼如下(是原書中配套的代碼,只是加了一點個人的註釋)
#include <stdio.h> #include <stdlib.h> /* 字符排版函數,將字符行內單字之間的空白字符平均分配插入到單字之間*/ #define N 80 edit(char *s) { int i,v,r; int inw; //指示變量,表示當前的是有意義的單詞還是空格 int sp; //空格字符個數 int w; //單個單詞個數 char buf[N],*str; for(inw=sp=w=i=0;s[i];i++) { if(s[i]==‘ ‘) { /* 統計空白個數*/ sp++; inw=0; /* 置空白符狀態*/ } else if(!inw) { w++; /* 統計單字個數*/ inw=1; /* 置單字狀態*/ } }if(w<=1) return; /* 單字數不超過1, 不排版 */ v=sp/(w-1); /* 每個間隔平均空白符 */ r=sp%(w-1); /* 多余的空白符 */ strcpy(buf,s); //將接收到的字符拷貝到buf中 for(str=buf;;) { /*1、掠過整個字符串前的空格號*/ while(*str==‘ ‘)str++; /*2、將單個的英文單詞復制到字符數組s中 */ for(;*str&&*str!=‘ ‘;)*s++=*str++; /*3、整個句子裏的所有英文單詞都復制完後返回 */ if(--w==0) return; /*4、在單詞與單詞之間插入計算好的空格數*/ for(i=0;i<v;i++) *s++=‘ ‘; /* 插入間隔空白符 */ /*5、在句子的末尾插入多於的空格數*/ if(r) { *s++=‘ ‘; /* 插入一個多余空白符 */ r--; } } } char buff[N]; main() /* 用於測試edit函數 */ { puts("This is a typeset program!\nPlease input a character line:\n"); gets(buff); edit(buff); printf("\nThe character line after typeset is:\n\n%s\n",buff); puts("\n Press any key to quit...\n "); getch(); }
C語言實例解析精粹學習筆記——29