当前位置: 首页 > news >正文

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

相关文章:

  • 前端框架Vue语法部分(一)
  • 进程创建进程终止进程等待
  • 【Linux】一万七千字详解 —— 基本指令(二)
  • 多维时序 | MATLAB实现CNN-GRU多变量时间序列预测
  • 为了摸鱼,我开发了一个工具网站
  • jenkins 共用宿主机中的docker自动化部署
  • 如何借助现有股票量化交易平台编写策略和回测分析
  • 腾讯产品经理的自动化工作流
  • 【Pygame实战】这游戏有毒,刷爆朋友圈:小编已与病毒版贪吃蛇大战了三百回合,最高分339?
  • Linux基本指令集合
  • Linux文件压缩和解压命令【gzip、gunzip、zip、unzip、tar】【详细总结】
  • vue.js毕业设计,基于vue.js前后端分离外卖点餐系统(H5移动项目) 开题报告
  • lazada买家订单导出
  • OTA: Optimal Transport Assignment for Object Detection原理与代码解读
  • JS 获取一个对象的 key 值和 value 值
  • MPLS_微P恩
  • R语言探索 BRFSS 数据和预测
  • 卡尔曼滤波器
  • DJYGUI系列文章十一:GDD矩形区域运算
  • pyinstaller打包记录|| 打包成功,含xgboost打包遇到的问题
  • 美航母撞船后又遇战机坠海,专家:长时间作战部署疲于奔命是主因
  • 4月译著联合书单|心爱之物:热爱如何联结并塑造我们
  • 狄威已任国铁集团副总经理
  • 最高法强化涉新就业形态民事案件审判指导:推动出台司法解释
  • 张炜琳已任三明市委常委、宣传部部长
  • 金科股份:去年营收约275亿元,今年确保所有项目“零烂尾”