C语言学习笔记(十)

这篇博客介绍了作者在学习C语言的第十天,重点是解决一个练习题——编写entab程序,该程序将空格串替换为最少的制表符和空格,同时保持单词间距不变。程序通过判断字符是否为空格,然后计算空格数量,根据位置关系决定是输出空格还是制表符。博主分享了详细的代码实现过程,并解释了不同情况下的字符替换策略。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值