将字符行内单字之间的空白符平均分配插入到单字之间,以实现字符行排版。首先要统计字符行内单字个数,字符行内的空白字符数。然后计算单字之间 应该平均分配的空白字符数,另外约定多余的空白字符插在前面的单字间隔中前面的每个间隔多一个空白符,插完为止。
下面是我的代码的实现部分,这个字符行排版代码比较简答,其中的,实现统计单词个数的方法还是值得大家学习一下的。
~~~
#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;
}
~~~
下面是我的程序的运行结果:
![这里写图片描述](https://box.kancloud.cn/2016-05-24_5743c075d9bbe.jpg "")
- 前言
- 实例一: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实现两个文件的内容输出到同一个屏幕