• C语言学习笔记(十)


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

    #include

    #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;
            }
        }
    }

  • 相关阅读:
    算法通关村第六关—序列恢复二叉树(青铜)
    【quartz】从数据库中读取配置实现动态定时任务
    CD147单克隆抗体通过酰胺反应偶联到Dox-CMCh-BAPE聚合物胶束/CBZ-AAN-Dox的制备
    【6~10章要点总结】
    含文档+PPT+源码等]精品微信小程序食堂订餐点餐项目+后台管理系统|前后分离VUE[包运行成功]微信小程序项目源码Java毕业设计
    java设计模式-观察者模式
    备忘录模式
    字符串查询--Python
    do-exercise-排序子序列
    二 centos 7.9 磁盘挂载
  • 原文地址:https://blog.csdn.net/u014360189/article/details/128028571