练习 1-21 将空格串替换为最少数量的制表符和空格
/******************************************************************** 类型:<c程序设计语言(第二版.新版)> 练习 1-21 名称:lx.c author: wubenzhimu data: 2012.11 功能:编写程序entab,将空格串替换为最少数量的制表符和空格, 但要保证单词之间的间隔不变。假设制表符终止位的位置与练习 1-20的detab程序的情况相同。当使用一个制表符或者一个空格都 可以到达下一个制表符终止位时,选用哪一种替换字符比较好。 *********************************************************************/ /* 思路: 先判断输入的字符类型 如果是空格 就++运算 统计空格的数量 如果是换行,就把所有的统计数据清空 否则就进行替换运算,先根据制表符的公式求出第一个制表符需要的空格数, 如果空格总是大于制表符的位数,就循环减去制表符的位数, 如果空格小于制表符的位数,就循环输出空格 */ #include <stdio.h> #define DETAB 8 /* 制表符默认位数 */ int main () { int c; int nbspLength = 0; /* 空格的长度 */ int charLength = 0; /* 字符串的长度 */ int tabLength = 0; /* 如果出现字符少于8位制表符的位数 */ while ( (c=getchar()) != EOF ) { if ( c == ' ' ) { nbspLength++; } else if ( c == '\n' ) { nbspLength = 0; charLength = 0; } else if(nbspLength>0) { tabLength = (DETAB-charLength)%DETAB; if(tabLength>0& Length>=tabLength) { putchar ( '\t' ); nbspLength = nbspLength-tabLength; } if(nbspLength>DETAB) { while(nbspLength>DETAB) { putchar ( '\t' ); nbspLength = nbspLength-DETAB; } charLength=nbspLength; while(nbspLength>0) { putchar ( ' ' ); nbspLength--; } } else { charLength=nbspLength; while(nbspLength>0){ putchar ( ' ' ); nbspLength--; } } } putchar ( c ); charLength++; nbspLength = 0; } return 0; }
多亏朋友给了点指点,不然我自己还绕呢。。。
charLength=nbspLength; 朋友写的点睛之笔!!
结果: