天天看點

将輸入的制表符替換成适當數目的空格,使空格充滿到下一個制表符終止的地方。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//最大緩沖區1024
#define MAX_BUFFER   1024
#define SPACE        ' '
#define TAB          '\t'


//計算空格數
int CalculateNumberOfSpaces(int Offset, int TabSize)
{
    return TabSize - (Offset % TabSize);
}

/* K&R's getline() function from p29 */
int getline(char s[], int lim)
{
    int c, i;

    for (i = ; i < lim -  && (c = getchar()) != EOF && c != '\n'; ++i)
        s[i] = c;
    if (c == '\n')
    {
        s[i] = c;
        ++i;
    }
    s[i] = '\0';

    return i;
}

//主函數
int main(void)
{
    char  Buffer[MAX_BUFFER];
    int TabSize = ; /* A good test value */

    int i, j, k, l;

    while (getline(Buffer, MAX_BUFFER) > )
    {
        for (i = , l = ; Buffer[i] != '\0'; i++)
        {
            if (Buffer[i] == TAB)
            {
                j = CalculateNumberOfSpaces(l, TabSize);
                for (k = ; k < j; k++)
                {
                    putchar(SPACE);
                    l++;
                }
            }
            else
            {
                putchar(Buffer[i]);
                l++;
            }
        }
    }

    return ;
}