首页 > 代码库 > 《C程序设计语言》读书笔记----习题1-21

《C程序设计语言》读书笔记----习题1-21

题目就不写了,大概意思就是:尽量用制表符‘\t‘替换掉字符串中的空格。

同学们需要注意的是,打印一个制表符‘\t‘,其所占长度不是固定的。

这里要理解“制表符”和“制表符终止位”。“制表符”的作用是使得光标移动到下一个“制表符终止位”上。举个例子,假设制表符终止位是4、8、12、16......已经已经输入了10个字符,然后按一下Tab键,那么光标会移动到位置12上,同学们新建一个文本文档试一下就了解了。

这个题目看似简单,但是写一个简单、清晰的程序还是需要花一点脑筋的。

/*这个程序看似简单,但是写一个简单、清晰的程序还是需要花一点脑筋的。要去思考:什么情况下可以用一个‘\t‘代替空格?事实上只有一种情况,那就是:  当一个“非空格字符”和该字符的下一个制表符终止位之间全部都是空格的时候,就可以用  一个制表符‘\t‘替换这些空格  例如:(用 _ 代表一个空格,用 | 表示制表符终止位,注意 | 并不是字符串的一部分)  _ _ _ a b c _ _ | _ b c d f t q u r | _ d     能够用制表符替换的空格只有:(用 * 号 表示用制表符替换掉的空格)  _ _ _ a b c * * | _ b c d f t q u r | _ d*/#include<stdio.h>#define TABSTOP 8    //在Console中,制表符终止位一般是8,16,24,32......int main(){    int total = 0; //已经读到的字符数    int spaces = 0; //已经读到的空格数    char c;          //当前读到的字符    while ((c = getchar()) != EOF)    {        if (c !=  )   //如果c不是一个空格        {              if (spaces == 0) //如果已经读到 0 个空格            {                putchar(c);                ++total;            }            else   //c不是一个空格,但是读到的空格数 不等于 0            {                for (; spaces > 0; --spaces)//输出空格                    putchar( );                spaces = 0;                 //读到的空格数重新置为 0                 ++total;                putchar(c);//输出当前读到的字符            }            if (c == \n)            {                total = 0;                spaces = 0;            }        }        else //读了一个空格        {            ++total;            ++spaces;            int temp = (total-spaces) / TABSTOP;            int nextLocation = (++temp) * TABSTOP;//下一个 制表符终止位            if ( total< nextLocation)                ;            else//用‘\t‘填充空格            {                for (int i = 0; i < (nextLocation - (total-spaces)); i++)//为了明确输出的是‘\t‘,用*号比较直观。                    putchar(*);                //putchar(‘\t‘);                spaces = 0;//读到的空格数重新置为 0             }        }    }    return 0;}

 

《C程序设计语言》读书笔记----习题1-21