Exercise 1.18 - Remove trailing blanks and tabs#
Question#
Write a program to remove trailing blanks and tabs from each line of input, and to delete entirely blank lines.
Solution#
/**
*
* Exercise 1.18 - Write a Program to remove the trailing blanks and tabs
* from each input line and to delete entirely blank lines
*
**/
#include<stdio.h>
#define MAXLINE 1000
int mgetline(char line[],int lim);
int removetrail(char rline[]);
int main(void)
{
int len;
char line[MAXLINE];
while((len=mgetline(line,MAXLINE))>0)
if(removetrail(line) > 0)
printf("%s",line);
return 0;
}
int mgetline(char s[],int lim)
{
int i,c;
for(i=0;i<lim-1 && (c=getchar())!=EOF && c!='\n';++i)
s[i] = c;
if( c == '\n')
{
s[i]=c;
++i;
}
s[i]='\0';
return i;
}
/* To remove Trailing Blanks,tabs. Go to End and proceed backwards removing */
int removetrail(char s[])
{
int i;
for(i=0; s[i]!='\n'; ++i)
;
--i; /* To consider raw line without \n */
for(i >0; ((s[i] == ' ') || (s[i] =='\t'));--i)
; /* Removing the Trailing Blanks and Tab Spaces */
if( i >= 0) /* Non Empty Line */
{
++i;
s[i] = '\n';
++i;
s[i] = '\0';
}
return i;
}
Explanation#
In the removetrail function, we go to the very end of the line and the trace back to the find the character which is not a space, tab and then replace it with 0. This eliminates the trailing blanks in a line. For the empty lines whose length is 0, we simply skip that from output and thus removing it.