Specification coding question 1

Write the implementation of the following SimpleString class.
/* name: simplestring.h
** author: L. Liberti
*/

#ifndef _SIMPLESTRINGH
#define _SIMPLESTRINGH

#include<iostream>

class SimpleString {
 public:
  // default constructor: initialise an empty string
  SimpleString();

  // initialise a string from an array of characters
  SimpleString(char* initialiseFromArray);

  // destroy a string
  ~SimpleString();

  // return the size (in characters)
  int size(void) const;

  // return the i-th character (overloading of [] operator)
  char& operator[](int i);

  // copy from another string
  void copyFrom(SimpleString& s);

  // append a string to this
  void append(SimpleString& suffix);
  
  // does this string contain needle?
  bool contains(SimpleString& needle) const;

 private:

  int theSize;
  char* buffer;
  int theAllocatedSize;
  static const int theMinimalAllocationSize = 1024;
  char theZeroChar;
};

std::ostream& operator<<(std::ostream& out, SimpleString& s);

#endif
Test it with with the following main program:
/* name: ssmain.cxx
   author: Leo Liberti
*/

#include<iostream>
#include "simplestring.h"

int main(int argc, char** argv) {
  using namespace std;
  SimpleString s("I'm ");
  SimpleString t("very glad");
  SimpleString u("so tired I could pop");
  SimpleString v("very");
  cout << s << endl;
  cout << t << endl;
  cout << u << endl << endl;
  SimpleString w;
  w.copyFrom(s);
  s.append(t);
  w.append(u);
  cout << s << endl;
  cout << w << endl << endl;
  if (s.contains(v)) {
    cout << "s contains very" << endl;
  } else {
    cout << "s does not contain very" << endl;
  }
  if (w.contains(v)) {
    cout << "w contains very" << endl;
  } else {
    cout << "w does not contain very" << endl;
  }
  return 0;
}
and check that the output is as follows.
I'm 
very glad
so tired I could pop

I'm very glad
I'm so tired I could pop

s contains very
w does not contain very

Write also a makefile for building the object file simplestring.o and the executable ssmain.



Subsections

Leo Liberti 2008-01-12