k&r习题,将空格替换为制表。
参考答案:
#include<stdio.h> #define TABINC 8 main() { int c,nb,nt,pos; nb=nt=0; for(pos=1;(c=getchar())!=EOF;++pos){ if(c==‘ ‘){ if(pos%TABINC != 0) ++nb; else{ nb=0; ++nt; } }else{ for( ;nt>0;--nt) putchar(‘\t‘); if(c==‘\t‘) nb=0; else for( ;nb>0;--nb) putchar(‘*‘);// 将空格换成*,便于观察 putchar(c); if(c==‘\n‘) pos=0; else if(c==‘\t‘) pos=pos+(TABINC-(pos-1)%TABINC)-1; } } }
最后处理pos的部分好像不用这么复杂,可以写成这样(自己测试和原程序效果一样,不敢确定完全正确):
if(c==‘\n‘ || c==‘\t‘) pos=0;
时间: 2024-10-18 07:52:08