练习1-21。写一个程序entab
,用最小数量的制表符和空格来替换空格字符串,以达到相同的间距。使用与detab相同的制表位。当一个制表符或一个空白就足以到达制表位时,应该优先考虑哪一个?
我为练习写的代码:
#include <stdio.h>
#define TAB 8
void entab(int space);
int main()
{
int c, i;
i = 0;
while ((c = getchar()) != EOF)
{
if (c == ' ')
++i;
else if (c == '\t')
i = i + TAB;
else
{
entab(i);
i = 0;
putchar(c);
}
}
return 0;
}
void entab(int space)
{
int i;
for (i = 1; space >= TAB; ++i)
if (i == TAB)
{
putchar('\t');
i = 0;
space = space - TAB;
}
for (i = 0; i < space; ++i)
putchar(' ');
}
字符串
但是当我给予它输入“3个空格+一个制表符+ 5个空格+ j”时,我得到的输出比输入长:
x1c 0d1x的数据
图片中的第一行是输入,第二行是输出
更新:
根据其中一个注解和其中一个答案重写代码如下:
#include <stdio.h>
#define TAB 8
void entab(int space);
int main()
{
int c, i, l;
i = l = 0;
while ((c = getchar()) != EOF)
{
++l;
if (c == ' ')
++i;
else if (c == '\t')
i = i + TAB - (l%8);
else
{
entab(i);
i = 0;
putchar(c);
}
if (c == '\n')
l = 0;
}
return 0;
}
void entab(int space)
{
int i;
for (i = 0; space >= TAB; ++i)
if (i == TAB)
{
putchar('\t');
i = -1;
space = space - TAB;
}
for (i = 0; i < space; ++i)
putchar(' ');
}
型
但现在的问题是它总是比输入少一个字符:
的
1条答案
按热度按时间bvhaajcl1#
您看到的输出比输入长,因为程序将每个空格替换为一个制表符和一些空格。您应该修改
entab
函数,将空格字符串替换为一个制表符,后跟适当数量的空格。字符串