C程序设计语言,练习1-20
这里有一个知识点:制表符终止位为8的整数倍。
依然在之前练习的基础上修改,将getline()函数改写为detab(),当有’\t’输入时进行字符替换。
测试结果与代码如下,有bug欢迎指正!
代码:
#include <stdio.h>
#define MAXLEN 1000
int detab(char s[],int lim);
int copy(char from[],char to[],int len,int line_num);
int main()
{
int len;
int line_num = 0;
char c_out[MAXLEN];
char c_current[MAXLEN];
while((len = detab(c_current,MAXLEN)) > 0)
{
line_num = copy(c_current,c_out,len,line_num);
}
c_out[line_num] = '\0';
printf("%s",c_out);
return 0;
}
int detab(char s[],int lim)
{
int i,j=0,c;
for(i = 0; i<lim-1 && (c=getchar())!= EOF && c!='\n';i++)
{
if(c != '\t')
s[i] = c;
else
{
//计算应该插入多少个*
j = i + 8 - (i%8);
while(i < j)
{
s[i] = '*';
i++;
}
i--;
}
}
if(c == '\n')
{
s[i] = c;
i++;
}
return i;
}
int copy(char from[],char to[],int len,int line_num)
{
int i;
for(i = 0; i < len; i++)
{
to[line_num] = from[i];
line_num++;
}
return line_num;
}