题目:

将字符行内单字之间的空格平均分配插入到单字之间,以实现字符行排版。也就是输入一个英文句子,单词之间的空格数目不同,将这些空格数平均分配到单词之间,重新输出。

代码如下(是原书中配套的代码,只是加了一点个人的注释)

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /* 字符排版函数,将字符行内单字之间的空白字符平均分配插入到单字之间*/
  5. #define N 80
  6. edit(char *s)
  7. {
  8. int i,v,r;
  9. int inw; //指示变量,表示当前的是有意义的单词还是空格
  10. int sp; //空格字符个数
  11. int w; //单个单词个数
  12. char buf[N],*str;
  13. for(inw=sp=w=i=;s[i];i++)
  14. {
  15. if(s[i]==' ')
  16. { /* 统计空白个数*/
  17. sp++;
  18. inw=; /* 置空白符状态*/
  19. }
  20. else if(!inw)
  21. {
  22. w++; /* 统计单字个数*/
  23. inw=; /* 置单字状态*/
  24. }
  25. }
  26. if(w<=)
  27. return; /* 单字数不超过1, 不排版 */
  28. v=sp/(w-); /* 每个间隔平均空白符 */
  29. r=sp%(w-); /* 多余的空白符 */
  30. strcpy(buf,s); //将接收到的字符拷贝到buf中
  31. for(str=buf;;)
  32. {
  33. /*1、掠过整个字符串前的空格号*/
  34. while(*str==' ')str++;
  35. /*2、将单个的英文单词复制到字符数组s中 */
  36. for(;*str&&*str!=' ';)
  37. *s++=*str++;
  38. /*3、整个句子里的所有英文单词都复制完后返回 */
  39. if(--w==)
  40. return;
  41. /*4、在单词与单词之间插入计算好的空格数*/
  42. for(i=;i<v;i++)
  43. *s++=' '; /* 插入间隔空白符 */
  44. /*5、在句子的末尾插入多于的空格数*/
  45. if(r)
  46. {
  47. *s++=' '; /* 插入一个多余空白符 */
  48. r--;
  49. }
  50. }
  51. }
  52. char buff[N];
  53. main() /* 用于测试edit函数 */
  54. {
  55.  
  56. puts("This is a typeset program!\nPlease input a character line:\n");
  57. gets(buff);
  58. edit(buff);
  59. printf("\nThe character line after typeset is:\n\n%s\n",buff);
  60. puts("\n Press any key to quit...\n ");
  61. getch();
  62. }

C语言实例解析精粹学习笔记——29的更多相关文章

  1. C语言实例解析精粹学习笔记——18

    <C语言实例解析精粹>中编译环境采用的是Turbo C 2.0.但是这个编译器年代久远,较新的编译器对书中的某些例子支持不好,在学习的时候同时做一些笔记. 实例18:将一个无符号整数转换为 ...

  2. C语言实例解析精粹学习笔记——35(报数游戏)

    实例35: 设由n个人站成一圈,分别被编号1,2,3,4,……,n.第一个人从1开始报数,每报数位m的人被从圈中推测,其后的人再次从1开始报数,重复上述过程,直至所有人都从圈中退出. 实例解析: 用链 ...

  3. C语言实例解析精粹学习笔记——42(插入排序)

    实例说明: 将一个整数数组按从小到大的顺序进行排序.(主要学习基本的插入排序和改进的冒泡排序的算法和应用) 思路1: 从第一个数据开始,分别比较其后的数据,若比它小,则将这两个数的位置交换:从第一个数 ...

  4. C语言实例解析精粹学习笔记——36(模拟社会关系)

    实例: 设计一个模拟社会关系的数据结构,每个人的信息用结构表示,包含名字.性别和指向父亲.母亲.配偶.子女的指针(只限两个子女).要求编写以下函数: (1)增加一个新人的函数 (2)建立人与人之间关系 ...

  5. C语言实例解析精粹学习笔记——32

    实例32: 编制一个包含姓名.地址.邮编和电话的通讯录输入和输出函数. 思路解析: 1.用结构体来完成姓名.地址.邮编和电话的组合. 2.结构体指针的使用. 3.malloc的使用 4.scanf函数 ...

  6. C语言实例解析精粹学习笔记——31

    实例31: 判断字符串是否是回文 思路解析: 引入两个指针变量(head和tail),开始时,两指针分别指向字符串的首末字符,当两指针所指字符相等时,两指针分别向后和向前移动一个字符位置,并继续比较, ...

  7. C语言实例解析精粹学习笔记——30

    实例30: 用已知字符串s中的字符,生成由其中n个字符组成的所有字符排列.设n小于字符串s的字符个数,其中s中的字符在每个排列中最多出现一次.例如,对于s[]="abc",n=2, ...

  8. C语言实例解析精粹学习笔记——28

    实例28:从键盘读入实数 题目要求: 编制一个从键盘读入实数的函数readreal(double *rp).函数将读入的实数字符列转换成实数后,利用指针参数rp,将实数存于指针所指向的变量*rp. 思 ...

  9. C语言实例解析精粹学习笔记——26

    实例26:阿拉伯数字转换为罗马数字,将一个整数n(1~9999)转换为罗马数字,其中数字和罗马数字的对应关系如下: 原书中的开发环境很老,我也没有花心思去研究.自己在codeblocks中进行开发的, ...

随机推荐

  1. RN的打包

    1.首先执行以下命令 在android目录下 keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -key ...

  2. Android 编码风格规范,很赞哦

    1. 前言 这份文档参考了 Google Java 编程风格规范和 Google 官方 Android 编码风格规范.该文档仅供参考,只要形成一个统一的风格,见量知其意就可. 1.1 术语说明 在本文 ...

  3. Homestead 安装 phpMyAdmin 作为数据库管理客户端 — Laravel 实战 iBrand API 教程

    简介 phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库.借由此Web接口可以成为一个简易方式输 ...

  4. ring0 SSDTHook 实现x64/x86

    #include "HookSSDT.h" #include <ntimage.h> #define SEC_IMAGE 0x001000000 ULONG32 __N ...

  5. April 25 2017 Week 17 Tuesday

    Have you ever known the theory of chocie? There are a bunch of axiems, but there are only two thing ...

  6. input,button制作按钮IE6,IE7点击时1px黑边框的解决方法

    按钮在IE6中点击时1px黑边框的最常见的解决方法 首先设置按钮为none,然后在按钮外面套一层来实现边框的效果,部分代码如下 .btnbox{ border:solid 1px red;} .btn ...

  7. 制作URL以GET方式提交的简单加密程序

    首先我们用到的是 DESCryptoServiceProvider 类 对此微软给出的解释是 定义访问数据加密标准 (DES) 算法的加密服务提供程序 (CSP) 版本的包装对象.无法继承此类. 接下 ...

  8. Android(java)学习笔记61:Android中的 Application类用法

    1. 简介 如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型:而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就 ...

  9. http主要内容流程介绍

    从这张图可以看出,从输入网址,按下回车的那一刻起,就开始了Redirect,那么为什么一开始就redirect呢?因为我们的浏览器可能记录了你的这个地址,以及永久跳转成一个新的地址了,所以一开始浏览器 ...

  10. 定位webpack文件大小

    之前发现一个神器,记录一下,可以可视化webpack打包的每个js文件大小,这样对我们优化代码是有帮助的,有目标的 https://www.npmjs.com/package/webpack-bund ...