This program can buffer up to a certain number of blank characters, and spills only one character at a time when the buffer is full.
#include <stdio.h>
#define BUFFERSIZE 100
int bufpos = 0;
char buffer[BUFFERSIZE];
void clear_buffer(void)
{
bufpos = 0;
}
void flush(void)
{
int i;
for (i = 0; i < bufpos; ++i)
putchar(buffer[i]);
clear_buffer();
}
void push(char c)
{
if (bufpos<BUFFERSIZE)
buffer[bufpos++] = c;
else
{
int i;
putchar(buffer[0]);
for (i=1; i<BUFFERSIZE; ++i)
buffer[i-1] = buffer[i];
buffer[BUFFERSIZE-1] = c;
}
}
void display(char c)
{
flush();
putchar(c);
}
void strip(char c)
{
switch(c)
{
case ' ':
case '\t':
push(c);
break;
case '\n':
clear_buffer();
putchar(c);
break;
default:
display(c);
break;
}
}
int main(void)
{
int c;
int newline = 1;
while (c=getchar(), c!=EOF)
{
if (!newline || c!='\n')
{
newline = 0;
strip(c);
}
if (c=='\n')
newline = 1;
}
return 0;
}
No comments:
Post a Comment