The C Programming Language 练习题1-21
2017-09-21 23:17
357 查看
练习 1-21
编写程序 entab,将空格串替换为最少数量的制表符和空格,但要保持单词之间的间隔不变。假设制表符终止位的位置与练习1-20 的detab程序的情况相同。当使用一个制表符或者一个空格都可以到达下一个制表符终止位时,选用哪一种替换字符比较好?
题目分析
此习题要求将字符串中的空格键替换为最少的制表符和空格的组合,Windows默认制表符占8个字符空间,例如有15个空格,那么要用2个制表符和1个空格来代替。
编程思路
1.逐字判断输入字符是否空格,如果不是就直接输出。
2.如果出现空格,就给空格计数加1,再返回读取。
如果不是空格,判断空格数是否大于0,然后计算输出几个制表符和几个空格并输出,输出完之后将空格计数清零并将最近读到的这个非空格字符输出。
如果不是空格,判断是否换行,如果是换行则将空格数目清零;
如果都不是,则直接输出字符。
3.继续判断。
程序实现部分
}
运行结果
好奇怪,将代码中‘\t’替换为字母t,‘ ’替换为*,发现制表符和空格数目计算没错,但输出偏偏不正确,仍然不知道问题出在哪,摸索中。。。
编写程序 entab,将空格串替换为最少数量的制表符和空格,但要保持单词之间的间隔不变。假设制表符终止位的位置与练习1-20 的detab程序的情况相同。当使用一个制表符或者一个空格都可以到达下一个制表符终止位时,选用哪一种替换字符比较好?
题目分析
此习题要求将字符串中的空格键替换为最少的制表符和空格的组合,Windows默认制表符占8个字符空间,例如有15个空格,那么要用2个制表符和1个空格来代替。
编程思路
1.逐字判断输入字符是否空格,如果不是就直接输出。
2.如果出现空格,就给空格计数加1,再返回读取。
如果不是空格,判断空格数是否大于0,然后计算输出几个制表符和几个空格并输出,输出完之后将空格计数清零并将最近读到的这个非空格字符输出。
如果不是空格,判断是否换行,如果是换行则将空格数目清零;
如果都不是,则直接输出字符。
3.继续判断。
程序实现部分
int main() { int spacenum; /*输入字符串中每段空格数量*/ int tabnumfinal; /* 替换后所需制表符个数 */ int spacenumfinal; /* 替换后所需空格个数 */ char c; spacenum = tabnumfinal = spacenumfinal = 0; while ((c = getchar()) != EOF) { /* 如果输入空格,就给spacenum加1 */ if ( c == ' ') spacenum++; /* 如果输入不是空格,并且spacenum大于0,计算替换这一段的空格数所需的 制表符和空格个数,并且输出 */ else if ( spacenum > 0 ) { tabnumfinal = ( spacenum / DEFAULTTABNUM ); spacenumfinal = ( spacenum % DEFAULTTABNUM ); while (tabnumfinal > 0) { putchar('\t'); tabnumfinal--; } while (spacenumfinal > 0) { putchar(' '); spacenumfinal--; } spacenum = 0; putchar(c); } /* 如果输入换行将spacenum清零 */ else if ( c == '\n') spacenum = 0; /* 如果既没有输入空格,空格计数=0,也不是换行,直接输出字符 */ else putchar(c); } return 0;
}
运行结果
输入:aaaa bcd efgh abcdef ghijklmn 输出:aaaa bcd efgh abcdef ghijklmn
好奇怪,将代码中‘\t’替换为字母t,‘ ’替换为*,发现制表符和空格数目计算没错,但输出偏偏不正确,仍然不知道问题出在哪,摸索中。。。
输入:aaaa bcd efgh abcdef ghijklmn 输出:aaaa****bcdtefght*abcdeftt*ghijklmn
相关文章推荐
- The C Programming Language 练习题2-8
- <<The C Programming Language>>学习之路-练习题参考答案 1-3
- The C Programming Language 练习题2-1
- <<The C Programming Language>>学习之路-练习题参考答案 1-1
- <<The C Programming Language>>学习之路-练习题参考答案 1-12
- The C Programming Language 练习题1-22
- The C Programming Language 练习题1-24
- The C Programming Language 练习题3-1
- The C Programming Language 练习题3-6
- <<The C Programming Language>>学习之路-练习题参考答案 1-2
- <<The C Programming Language>>学习之路-练习题参考答案 1-4
- <<The C Programming Language>>学习之路-练习题参考答案 1-11
- The C Programming Language 练习题2-9
- The C Programming Language 练习题3-4
- The C Programming Language 练习题4-3
- The C Programming Language 练习题2-10
- The C Programming Language 练习题4-5
- The C Programming Language 练习题2-2
- The C Programming Language 练习题3-2
- The C Programming Language 练习题4-1