K&R的练习题偏难,但是个个题都是精华,建议先不管练习题,通读几遍,先记住基本的语法,再进行练习,练习时候如果感觉有难度,也可以先看答案,不过,一个题往往有多种解法,看完一种再自己思索下。
K&R 练习题 1-21
//write a program detab that replaces tabs in the input with the proper number of blanks to space to the next tab stop. Assume a fixed set of tab stops. say very n columns.
这个题目的意思,其实是自己定义tab的大小,并让字符按照定义tab的大小排列,比如输入 ab\tb\t, 如果定义tab为5, 则输出ab---b----,都整齐的按照tab定义大小排列。
小时候做数学题,不管会不会解,都要大大的写上一个解字有木有。恩。。。
解:
#include <stdio.h>
#define TABSIZE 10 // 定义一个tab为10个size
#define MAX_BUFFER 1000
#define SPACE '-' //为了显示方便,这里用‘-’ 代替空格‘ ’
int CaculatorTabLength(int l, int tabsize) //计算组成一个tab缺少的SPACE个数
{
return(tabsize - l%tabsize); //这儿取余数是这个算法的核心,耐心瞅瞅o(∩∩)o..
}
int mgetline(char s[], int lim)
{
int c, i;
for(i = 0; i < lim-