•  题目来源:《The C programming language》中的习题
  •  练习1-21:编写程序entab,将空格串替换为最好数量的制表符和空格,但要保持单词之间的间隔不变。

  思路: 

  对于制表符的作用我们已经在习题1-20中讲解了。

  这里的题目是用最少的制表符和空格代替空格。这里也分为以下几种情况:

  1. 字符为空格时,判断当前空格的位置,如果当前位置对8取余不为零,则nb++;如果当前位置对8取余等于零,ntab++,pos++,并且要把nb变为0;
  2. 字符为换行时,把变量清空,即nb=0,ntab=0,pos=0
  3. 字符为普通字符时,首先根据ntab的值for循环输出\t;同样根据nb的值循环输出空格。然后判断当前字符若为\t,则位置pos=pos+(ENTAB-pos%ENTAB)%ENTAB+1;否则令pos++。之后令nb为零。并输出当前字符。

  C语言代码实现:

#include<stdio.h>

#define ENTAB 8

void main(){
int c,nb,ntab,i,j,pos;
nb = ;
ntab = ;
i = ;
j = ;
pos = ;
while((c=getchar()) != EOF){
if(c == ' '){
if(pos%ENTAB != ){
nb++;
}else{
ntab++;
nb = ;
}
pos++;
}else if(c == '\n'){
nb = ;
ntab = ;
i=;
j=;
pos = ;
putchar(c);
}else{
for(;i<ntab;i++){
putchar('\t');
}
for(;j<nb;j++){
putchar(' ');
}
if(c == '\t'){
pos += (ENTAB-pos%ENTAB)%ENTAB+;
}else{
pos++;
}
putchar(c);
nb = ;
ntab = ;
i = ;
j = ; }
}
}

最新文章

  1. 编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc。
  2. yii框架中保存第三方登录信息
  3. PyDev+eclipse的编码问题
  4. 单例模式 GetInstance()
  5. 「JAVA」:Berkeley DB的JAVA连接
  6. BZOJ 1342: [Baltic2007]Sound静音问题( 单调队列 )
  7. Python的print中国输出对齐问题
  8. asp.net 获得客户端 mac 地址
  9. linux命令分块总结---多操作才是真理
  10. webservice第二篇【自定义webservice服务、soa、uddi概念、soap协议】
  11. Android基础知识02—安卓日志工具LogCat的五种方法
  12. 利用Form组件和ajax实现的注册
  13. CSS实现水平垂直同时居中的6种思路
  14. C语言程序设计--字符串与指针及数组与指针
  15. 如何用有NFC功能的手机微信给公交卡充值?入口在那里?
  16. Cisco ASA(8.4)端口映射设定(ASDM)
  17. sql server生成自动增长的字母数字字符串
  18. MapReduce (hive表SequenceFile的结果做输入)、MultipleOutputs和Reduce端迭代iterable的一些说明
  19. ios 开发之本地推送
  20. How many ways??---hdu2157(矩阵快速幂)

热门文章

  1. [Go] Returning Multiple Values from a Function in Go
  2. [Functional Programming] Running though a serial number prediction functions for tagging, pairing the result into object
  3. ASP入门(十七)-ASP #include
  4. Perl、PHP、Python、Java 和 Ruby 比较【转载+整理】
  5. ORACLE 执行计划
  6. Node.js 笔记(一) nodejs、npm、express安装
  7. Android 之 获取地理位置及监听
  8. flume-elasticsearch-sink indexName
  9. SSH协议
  10. oracle数据库,怎么给已有数据的表添加自增字段