主页 > IT业界  > 

C语言学习笔记(十)

C语言学习笔记(十)

C语言学习第十天,今天主要是做昨天后面留的练习题,习题难度比较大,基本一个题得1~2个小时做,明天继续做。

#include <stdio.h>

#define TABNUM 8 /*练习1-21 编写程序entab,将空格串替换为最少来嗯的制表符和空格,但要保持单词之间的间隔不变。假设制表符终止位的位置与练习1-20的detab程序的情况相同。当使用一个制表符或者一个空格都可以达到下一个制表符终止位时,选用哪一种替换字符比较好?*/ main() {      int c, pos, i, nspace, temp; /* 输入的字符、用于记录每一个8位(tab数)输入当前到第几位了、nspace用于记录一个8位连续空格数目*/

    i = pos = nspace = temp = 0;     while ((c = getchar()) != EOF) {         if (c == ' ') { /* 空格时记录空格数目  */             ++nspace;         } else {             if (nspace > 0) { /* 在一串空格后 */                 temp = nspace + pos;  /* 先看之前输入的字符数+空格数的个数 */                 if (temp < 8)  {    /* 如果个数小于8, 说明还没有到达制表发的标准,原样出空格即可*/                     for(i = 0; i < nspace; i++)                         putchar(' ');                 } else { /* 如果大于等于8, 说明已经至少可以数出一个制表符了,*/                     /* 每一个制表符可以填充到8位, 每次填充一个制表符后减去8位,直到剩下的字符数量不够8位,就原样数出空格即可*/                     while ((temp - 8) >= 0) {                         putchar('\t');                         temp = temp - 8;                     }                     for(i = 0; i < temp; i++)                         putchar(' ');                 }                 pos = temp; /* 空格和制表符输出之后,还剩下的字符作为下一次替换前的输入个数记录*/                 nspace = 0; /* 空格输出完毕后,把空格数清零*/             }             putchar(c); /* 替换或者不替换,都把这次的字符原样输出*/             ++pos; /*输入个数+1*/             if (pos >= 8) /*如果连续的输入达到了一个制表符还没被替换过,就把输入数赋值成除以8的余数*/                 pos = pos % 8;             if( c == '\n') /*换行后一切重新开始,输入数清空, 空格已经在上面清空了*/                 pos = 0;         }     } }

标签:

C语言学习笔记(十)由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“C语言学习笔记(十)