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¶
/**
* Exercise 1.19 - 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 _getline(char line[], int lim);
void reverse(char rline[]);
int main(void) {
int len;
char line[MAXLINE];
while ((len = _getline(line, MAXLINE)) > 0) {
reverse(line);
printf("%s", line);
}
return 0;
}
int _getline(char line[], int lim) {
int i, c;
for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
line[i] = c;
if (c == '\n') {
line[i] = c;
++i;
}
line[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;
}
}
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;
}