Exercise 1.19 - reverse a string

Question

Write a function reverse(s) that reverses the character string s. Use it to write a program that reverses its input a line at a time.

Solution

/* Write a function reverse that reverses the character string s; use it to write a program that reverses its input a line at a time */

#include<stdio.h>
#define MAXLINE 1000

int mgetline(char line[],int lim);
void reverse(char rline[]);

int main(void)
{
  int len;
  char line[MAXLINE];

  while((len=mgetline(line,MAXLINE))>0)
  {
    reverse(line);
    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;
}

void reverse(char rline[])
{
  int i,j;
  char temp;

  for(i=0;rline[i]!='\0';++i)
    ;
  --i;
  if(rline[i]=='\n')
  --i;

  j = 0;

  while(j < i)
  {
    temp = rline[j];
    rline[j] = rline[i];
    rline[i] = temp;
    --i;
    ++j;
  }
}
  
Run this

Explanation

A string in C is a character array which ends in 0. getline is a function in our program, which reads one character at a time using getchar and stores it in a character array called s[] and it returns the length of the array. We call the reverse function on our line. In the reverse function, we calculate the length of the line minus 0 and n if that is present. This determines the ultimate printable characters in the line from where we have to reverse.

We have to two incides, j=0 and i the last printable character and run through the program of swapping those characters till j < i. This reverses the contents of our string.

The crux of the program is this:

    j = 0;

while(j < i)
{
  temp = rline[j];
  rline[j] = rline[i];
  rline[i] = temp;
  --i;
  ++j;
}
Comments by Disqus