Lab 1 - Pointers and Recursion

Due: 10:00am on Wednesday The purpose of this lab is to write recursive functions and compare pointer manipulation to using array subscripts. Name your file lab1.cpp.

For this lab, you will use the following code snippet and fill in the function bodies for reverse_index and reverse_pointer. You can also view this code seperately in lab1_handout.cpp. To copy and paste this code into a file on Sleipnir when using vi, be sure to turn off indenting using the following command:

:set paste
When you are done pasting, you can turn indenting back on for coding using:
:set nopaste
Here is the code provided in lab1_handout.cpp:
#include <stdio.h>
#include <iostream>
using namespace std;

// This recursive function uses array subscripts to print the string in reverse
// Input: a character array that terminates with '\0'
//        an integer indicating the current character to inspect
// Output: the string in reverse
void reverse_index(char s[], int start);

// This recursive function uses pointer arithmetic to reverse the string
// Input: a pointer to the current character to inspect
// Output: the string in reverse
void reverse_pointer(char *s);

int main()
{
  char *str = "This is a test.";

  printf("Original string: %s\n", str);

  printf("Reverse using array subscripts: ");
  reverse_index(str, 0);
  printf("\n");

  printf("Reverse using pointers: ");
  reverse_pointer(str);
  printf("\n");

  return 0;
}
The pseudocode for the recursive function as discussed in class is:
if current character is the null character ('\0')
   return, do nothing (base case)
else
   call reverse with the next character in the string
   print the current character
   return out of the function
You will need to code reverse_index using the subscript operator to access each character. The parameter int start is the current subscript in the string. You will be changing this parameter with each recursive call.

The reverse_pointer function instead uses a pointer to the current character in the string, which is the char *s parameter. You will be incrementing this pointer with each recursive call. You will need to dereference the pointer to compare it to '\0' and to print out the character.

Email the completed lab1.cpp to me on Sleipnir.