將字符行內單字之間的空白符平均分配插入到單字之間,以實現字符行排版。首先要統計字符行內單字個數,字符行內的空白字符數。然后計算單字之間 應該平均分配的空白字符數,另外約定多余的空白字符插在前面的單字間隔中前面的每個間隔多一個空白符,插完為止。
下面是我的代碼的實現部分,這個字符行排版代碼比較簡答,其中的,實現統計單詞個數的方法還是值得大家學習一下的。
~~~
#include <stdio.h>
#define N 80
/**
* @brief main
* 將字符行內單字之間的空白符平均分配插入到單字之間,
* 以實現字符行排版。
*
* 首先要統計字符行內單字個數,字符行內的空白字符數。然后計算單字之間
* 應該平均分配的空白字符數,另外約定多余的空白字符插在前面的單字間隔中
* 前面的每個間隔多一個空白符,插完為止。
* @return
*/
edit(char *s)
{
int i,sp,w,inw,v,r;
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);
for(str=buf;;)
{
while(*str==' ')str++; /* 掠過空白符 */
for(;*str&&*str!=' ';) /* 復制單字 */
*s++=*str++;
if(--w==0)
return; /* 全部單字復制完畢,返回 */
for(i=0;i<v;i++)
*s++=' '; /* 插入間隔空白符 */
if(r)
{
*s++=' '; /* 插入一個多余空白符 */
r--;
}
}
}
int main() /* 用于測試edit函數 */
{
char buff[N];
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();
return 0;
}
~~~
下面是我的程序的運行結果:

- 前言
- 實例一:HelloWorld
- scanf函數學習
- 實數比較
- sizeof()保留字獲取類型的大小
- 自增/自減學習
- C學習if條件判斷和for循環
- C實現的九九乘法表
- C實現一個比較簡單的猜數游戲
- 使用C模擬ATM練習switch..case用法
- 記錄一個班級的成績練習一維數組
- C數組實現矩陣的轉置
- C二維數組練習
- 利用數組求前n個質數
- C實現萬年歷
- C實現數組中元素的排序
- C實現任意進制數的轉化
- C判斷一個正整數n的d進制數是否是回文數
- C使用遞歸實現前N個元素的和
- 鋼材切割問題
- 使用指針比較整型數據的大小
- 指向數組的指針
- 尋找指定元素
- 尋找相同元素的指針
- 整數轉換成羅馬數字
- 字符替換
- 從鍵盤讀入實數
- C實現字符行排版
- C實現字符排列
- C實例--判斷一個字符串是否是回文數
- 通訊錄的輸入輸出
- 撲克牌的結構定義
- 使用“結構”統計學生成績
- 報數游戲
- 模擬社會關系
- 統計文件中字符個數
- C實現兩個文件的內容輸出到同一個屏幕