100 Days of Code-day3

C progaramming language1-21

#define TABINCS 8
int main()
{
	int ns, nt;//ns,nt分别表示必要时打印空格和制表符的个数
	char c;
	int pos = 1;//记录程序在文本行中的位置
	ns = 0;
	nt = 0;
	while ((c = getchar()) != EOF)
	{
		pos++;//每输入一个字符记录一次位置
		//根据本题的要求,主要分为空格符和非空格符
		if (c == ' ')//空格符
		{
			if (pos % TABINCS != 0)//当遇到空格符时,首先记录空格符个数
			{
				ns++;
			}
			else//pos变量每递增到TABINCS的整数倍时
			{
				ns = 0;//重置空格符个数
				nt++;//转化为打印一个换行符
			}
			//这里涉及到只需要一个空格就能到达下一个制表符终止位
			//为了避免特殊情况(具体是什么情况还不清楚),这里将空格个数清零,相当于替换成换行符
		}
		else//遇到非空格符,能打印'\t'就先打印'\t',实在不行再打印空格符
		{
			for (; nt > 0 ; nt--)//在遇到非空格符时,先将之前积累的换行符打印好
								//此时光标在制表符终止位的整数倍位置上()
			{
				putchar('\t');
			}
			if (c == '\t')//如果输入的字符是换行符,那么光标依旧在制表符终止位的整数倍位置上,
						 //那么空格符没必要打印
			{
				ns = 0;
			}
			else//如果不是换行符,那么打印空格符是最优选择。如果打印制表符,会改变单词的间隔
			{
				for (; ns > 0; ns--)
				{
					putchar(' ');
				}
			}
			putchar(c);
			if (c == '\n')
			{
				pos = 0;//重置位置
			}
			else if (c == '\t')
			{
				pos = pos + (TABINCS - (pos - 1) % TABINCS)-1;//更新位置
				//(pos - 1) % TABINCS表示的内容取决于(pos - 1)与TABINCS这两者的大小
				//(pos - 1)>TABINCS时,它表示上一个制表符终止符和当前位置之间的字符数
				//(pos - 1)<TABINCS时,它表示当前制表符终止符和当前位置之间的字符数
			}
		}
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值