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.