Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

c++ visual studio 2019 Do not use #include Modify the String class in the following ways: Our String class always deletes the old character buffer

c++ visual studio 2019

Do not use #include

  1. Modify the String class in the following ways:
    1. Our String class always deletes the old character buffer and allocates a new character buffer on assignment or in the copy constructor. This need not be done if the new value is shorter than the current value and hence would fit the existing buffer. Rewrite the String class to only allocate a new buffer when necessary
    2. Overload the compound += operator to perform concatenation of two String objects.
    3. Overload the + operator using the += operator.
    4. Add a member function compare (String) that returns -1 or 0 or 1 depending on whether the string is lexicographically less than, equal to, or greater than the argument.

Provide a test program to test your class.

string.h---------------------------------------------------------------

#ifndef STRING_H #define STRING_H class String { public: String(); // Default constructor String(const char p[]); // Simple constructor String(const String& right); // Copy constructor ~String(); // Destructor String& operator=(const String& right); // Assignment operator String& operator+=(const String& right); int length() const; char& operator[](int index); char operator[](int index) const; private: char* buffer; int len; }; #endif

string.cpp------------------------------------------------------

#include #include using namespace std; #include "string.h"

String::String() { len = 0; buffer = NULL; // No need to allocate array to hold zero characters }

String::String(const char p[]) { // Determine number of characters in string (strlen(p)) len = 0; while (p[len] != '\0') len++; // Allocate buffer array, remember to make space for NULL character buffer = new char[len + 1]; // Copy new characters (strcpy( buffer, p )) for (int i = 0; i < len; i++) buffer[i] = p[i]; buffer[len] ='\0'; }

String::String(const String& right) { len = right.length(); buffer = new char[len + 1]; for (int i = 0; i < len; i++) buffer[i] = right[i]; buffer[len] = '\0'; }

String::~String() { delete[] buffer; }

int String::length() const { return len; }

char& String::operator [] (int index) { assert((index >= 0) && (index < len )); return buffer[index]; }

char String::operator [] (int index) const { assert((index >= 0) && (index < len )); return buffer[index]; }

String& String::operator=(const String& right) { if (this != &right) { delete[] buffer; // Get rid of old buffer len = right.length(); buffer = new char[len + 1]; for (int i = 0; i < len; i++) buffer[i] = right[i]; buffer[len] = '\0'; } return *this; }

ostream& operator << (ostream& out, const String& right) { int n = right.length(); for (int i = 0; i < n; i++) out << right[i]; return out;

}

stringtest.cpp--------------------------------------------------------------------

#include #include "string.h" using namespace std; ostream& operator << (ostream& out, const String& right); void main(){ String new_name; cout << new_name << endl; char letters[] = "Hello World"; String s(letters); cout << s << endl; String first("Fred"); cout << first << endl; String second(first); cout << second << endl; String third = first; // Also uses copy constructor cout << third << endl; String classmates[5] = {"Jim", "Peter"}; for (int i = 0; i < 5; i++) cout << i << " " << classmates[i] << endl; String test = classmates[2]; cout << "test is "<< test << endl; cout << test.length() << endl; //cout << (int)test[0] << endl; }

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Pro Database Migration To Azure Data Modernization For The Enterprise

Authors: Kevin Kline, Denis McDowell, Dustin Dorsey, Matt Gordon

1st Edition

1484282299, 978-1484282298

More Books

Students also viewed these Databases questions