/* 编写程序detab,将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符
终止位的地方.假设制表符终止位的位置是固定的,比如每隔n列就会出现一个制表符
终止位 */
#include<stdio.h>
#define stopbit 8 /* 制表符终止位 */
#define MAXLINE 1001 /* 允许的输入行的最大长度 */
int detab(char s[]);
int main(void)
{
char line[MAXLINE] = { 0 }; /* 当前的输入行 */
int c, i = 0;
freopen("C:\\\\Users\\wwwzh\\Desktop\\data.in", "r", stdin);
freopen("C:\\\\Users\\wwwzh\\Desktop\\data.out", "w", stdout);
while ((c = getchar()) != EOF)
{
line[i] = c;
if (c == '\n')
{
i++;
line[i] = '\0';
detab(line);
printf("%s", line);
i = -1;
}
i++;
}
return 0;
}
/* 将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方 */
int detab(char s[])
{
int i = 0;
while (s[i] != '\0')
{
int num = 0;//除把'\t'转换为' '需要添加的空格数
if (s[i] == '\t')
{
s[i] = ' ';//'\t'转换为' '
//(i,num)=(0,7)(1,6)(2,5)(3,4)(4,3)(5,2)(6,1)(7,0)(8,7)(9,6)...
num = stopbit - i % stopbit - 1;
}
while (num >= 1)
{
int k = 0;
while (s[k] != '\0')k++;//k指向'\0'字符
while (k >= i + 1)//i+1到'\0'位后移一位
{
s[k + 1] = s[k];
k--;
}
s[k + 1] = ' ';
num--;
i++;
}
i++;
}
return 0;
}
Notepad++制表符宽度设置:设置->首选项