I n lab exercises - Implement the Text ADT (use the declaration in the Text.h le
ID: 3749348 • Letter: I
Question
In lab exercises
- Implement the Text ADT (use the declaration in the Text.h le)
- Text(), operator=() and ~Text(), getLength(), clear(), operator[]
text.h
//--------------------------------------------------------------------
//
// Laboratory 1 Text.h
// **Instructor's Solution**
// Class declaration for the array implementation of the Text ADT
//
//--------------------------------------------------------------------
#ifndef TEXT_H
#define TEXT_H
#include <stdexcept>
#include <iostream>
using namespace std;
class Text
{
public:
// Constructors and operator=
Text ( const char *charSeq = "" ); // Initialize using char*
Text ( const Text &other ); // Copy constructor
void operator = ( const Text &other ); // Assignment
// Destructor
~Text ();
// Text operations
int getLength () const; // # characters
char operator [] ( int n ) const; // Subscript
void clear (); // Clear string
// Output the string structure -- used in testing/debugging
void showStructure () const;
//--------------------------------------------------------------------
// In-lab operations
// toUpper/toLower operations (Programming Exercise 2)
Text toUpper( ) const; // Create upper-case copy
Text toLower( ) const; // Create lower-case copy
// Relational operations (Programming Exercise 3)
bool operator == ( const Text& other ) const;
bool operator < ( const Text& other ) const;
bool operator > ( const Text& other ) const;
private:
// Data members
int bufferSize; // Size of the string buffer
char *buffer; // Text buffer containing a null-terminated sequence of characters
// Friends
// Text input/output operations (In-lab Exercise 1)
friend istream & operator >> ( istream& input, Text& inputText );
friend ostream & operator << ( ostream& output, const Text& outputText );
};
#endif
config.h
/**
* Text class (Lab 1) configuration file.
* Activate test 'N' by defining the corresponding LAB1_TESTN to have the value 1.
*/
#define LAB1_TEST1 0 // Programming exercise 2: toUpper and toLower
#define LAB1_TEST2 0 // Programming exercise 3: ==, <, and >
textio.cpp
//--------------------------------------------------------------------
//
// Laboratory 1, In-lab Exercise 1 textio.cpp
//
// String input/output operations
//
//--------------------------------------------------------------------
#include <iostream>
#include <iomanip>
#include "Text.h"
//--------------------------------------------------------------------
istream & operator >> ( istream &input, Text &inputText )
// Text input function. Extracts a string from istream input and
// returns it in inputText. Returns the state of the input stream.
{
const int textBufferSize = 256; // Large (but finite)
char textBuffer [textBufferSize]; // text buffer
// Read a string into textBuffer, setw is used to prevent buffer
// overflow.
input >> setw(textBufferSize) >> textBuffer;
// Apply the Text(char*) constructor to convert textBuffer to
// a string. Assign the resulting string to inputText using the
// assignment operator.
inputText = textBuffer;
// Return the state of the input stream.
return input;
}
//--------------------------------------------------------------------
ostream & operator << ( ostream &output, const Text &outputText )
// Text output function. Inserts outputText in ostream output.
// Returns the state of the output stream.
{
output << outputText.buffer;
return output;
}
Text.cpp
#include "Text.h"
Text::Text ( const char *charSeq )
{
bufferSize = strlen(charSeq) + 1;
}
Text::Text ( const Text &other )
{
}
void Text::operator = ( const Text &other )
{
}
Text::~Text ()
{
}
int Text::getLength () const
{
return -1;
}
char Text::operator [] ( int n ) const
{
return 0;
}
void Text::clear ()
{
}
void Text::showStructure () const
{
}
Text Text::toUpper( ) const
{
Text temp;
return temp;
}
Text Text::toLower( ) const
{
Text temp;
return temp;
}
bool Text::operator == ( const Text& other ) const
{
return false;
}
bool Text::operator < ( const Text& other ) const
{
return false;
}
bool Text::operator > ( const Text& other ) const
{
return false;
}
test1.cpp
//--------------------------------------------------------------------
//
// Laboratory 1 test1.cpp
//
// Test program for the operations in the Text ADT
//
//--------------------------------------------------------------------
#include <iostream>
#include "Text.h"
#include "config.h"
//--------------------------------------------------------------------
//
// Function prototype
void copyTester ( Text copyText ); // copyText is passed by value
void print_help ( );
//--------------------------------------------------------------------
int main()
{
Text a("a"), // Predefined test text objects
alp("alp"),
alpha("alpha"),
epsilon("epsilon"),
empty,
assignText, // Destination for assignment
inputText; // Input text object
int n; // Input subscript
char ch, // Character specified by subscript
selection; // Input test selection
// Get user test selection.
print_help();
// Execute the selected test.
cin >> selection;
cout << endl;
switch ( selection )
{
case '1' :
// Test 1 : Tests the constructors.
cout << "Structure of various text objects: " << endl;
cout << "text object: alpha" << endl;
alpha.showStructure();
cout << "text object: epsilon" << endl;
epsilon.showStructure();
cout << "text object: a" << endl;
a.showStructure();
cout << "empty text object" << endl;
empty.showStructure();
break;
case '2' :
// Test 2 : Tests the length operation.
cout << "Lengths of various text object:" << endl;
cout << " alpha : " << alpha.getLength() << endl;
cout << " epsilon : " << epsilon.getLength() << endl;
cout << " a : " << a.getLength() << endl;
cout << " empty : " << empty.getLength() << endl;
break;
case '3' :
// Test 3 : Tests the subscript operation.
cout << "Enter a subscript : ";
cin >> n;
ch = alpha[n];
cout << " alpha[" << n << "] : ";
if ( ch == '' )
cout << "\0" << endl;
else
cout << ch << endl;
break;
case '4' :
// Test 4 : Tests the assignment and clear operations.
cout << "Assignments:" << endl;
cout << "assignText = alpha" << endl;
assignText = alpha;
assignText.showStructure();
cout << "assignText = a" << endl;
assignText = a;
assignText.showStructure();
cout << "assignText = empty" << endl;
assignText = empty;
assignText.showStructure();
cout << "assignText = epsilon" << endl;
assignText = epsilon;
assignText.showStructure();
cout << "assignText = assignText" << endl;
assignText = assignText;
assignText.showStructure();
cout << "assignText = alpha" << endl;
assignText = alpha;
assignText.showStructure();
cout << "Clear assignText" << endl;
assignText.clear();
assignText.showStructure();
cout << "Confirm that alpha has not been cleared" << endl;
alpha.showStructure();
break;
case '5' :
// Test 5 : Tests the copy constructor and operator= operations.
cout << "Calls by value:" << endl;
cout << "alpha before call" << endl;
alpha.showStructure();
copyTester(alpha);
cout << "alpha after call" << endl;
alpha.showStructure();
cout << "a before call" << endl;
a.showStructure();
a = epsilon;
cout << "a after call" << endl;
a.showStructure();
cout << "epsilon after call" << endl;
epsilon.showStructure();
break;
#if LAB1_TEST1
case '6' : // In-lab Exercise 2
// Test 6 : Tests toUpper and toLower
cout << "Testing toUpper and toLower."
<< "Enter a mixed case string: " << endl;
cin >> inputText;
cout << "Input string:" << endl;
inputText.showStructure();
cout << "Upper case copy: " << endl;
inputText.toUpper().showStructure();
cout << "Lower case copy: " << endl;
inputText.toLower().showStructure();
break;
#endif // LAB1_TEST1
#if LAB1_TEST2
case '7' : // In-lab Exercise 3
// Test 7 : Tests the relational operations.
cout << " left right < == > " << endl;
cout << "--------------------------------" << endl;
cout << " alpha epsilon " << (alpha<epsilon)
<< " " << (alpha==epsilon) << " "
<< (alpha>epsilon) << endl;
cout << " epsilon alpha " << (epsilon<alpha)
<< " " << (epsilon==alpha) << " "
<< (epsilon>alpha) << endl;
cout << " alpha alpha " << (alpha<alpha) << " "
<< (alpha==alpha) << " " << (alpha>alpha) << endl;
cout << " alp alpha " << (alp<alpha) << " "
<< (alp==alpha) << " " << (alp>alpha) << endl;
cout << " alpha alp " << (alpha<alp) << " "
<< (alpha==alp) << " " << (alpha>alp) << endl;
cout << " a alpha " << (a<alpha) << " "
<< (a==alpha) << " " << (a>alpha) << endl;
cout << " alpha a " << (alpha<a) << " "
<< (alpha==a) << " " << (alpha>a) << endl;
cout << " empty alpha " << (empty<alpha) << " "
<< (empty==alpha) << " " << (empty>alpha) << endl;
cout << " alpha empty " << (alpha<empty) << " "
<< (alpha==empty) << " " << (alpha>empty) << endl;
cout << " empty empty " << (empty<empty) << " "
<< (empty==empty) << " " << (empty>empty) << endl;
break;
#endif // LAB1_TEST2
default :
cout << "'" << selection << "' specifies an inactive or invalid test" << endl;
}
return 0;
}
//--------------------------------------------------------------------
void copyTester ( Text copyText )
// Dummy routine that is passed a text object using call by value. Outputs
// copyText and clears it.
{
cout << "Copy of text object" << endl;
copyText.showStructure();
cout << "Clear copy" << endl;
copyText.clear();
copyText.showStructure();
}
//--------------------------------------------------------------------
void print_help()
{
cout << endl << "Tests:" << endl;
cout << " 1 Tests the constructors" << endl;
cout << " 2 Tests the length operation" << endl;
cout << " 3 Tests the subscript operation" << endl;
cout << " 4 Tests the assignment and clear operations" << endl;
cout << " 5 Tests the copy constructor and operator= operations" << endl;
cout << " 6 Tests the toUpper and toLower operations "
#if LAB1_TEST1
<< "(Active : "
#else
<< "(Inactive : "
#endif // LAB1_TEST1
<< "In-lab Exercise 2)" << endl;
cout << " 7 Tests the relational operations "
#if LAB1_TEST2
<< " (Active : "
#else
<< " (Inactive : "
#endif // LAB1_TEST2
<< "In-lab Exercise 3)" << endl;
cout << "Select the test to run : ";
}
Explanation / Answer
Hi , I am not pasting whole program. but only text.cpp with modification. please go threw it. may be your other overloaded operators are not working . please correct it. my chage will working with it.
#include "Text.h"
#include <string.h>
Text::Text ( const char *charSeq )
{
bufferSize = strlen(charSeq) + 1;
buffer = new char(bufferSize);
}
Text::Text ( const Text &other )
{
bufferSize = other.bufferSize + 1;
buffer = new char(bufferSize);
strcpy(buffer, other.buffer);
}
void Text::operator = ( const Text &other )
{
bufferSize = other.bufferSize;
strcpy(buffer, other.buffer);
}
Text::~Text ()
{
delete buffer;
}
int Text::getLength () const
{
return strlen(buffer);
}
char Text::operator [] ( int n ) const
{
return buffer[n];
}
void Text::clear ()
{
memset(buffer,0,bufferSize);
}
void Text::showStructure () const
{
cout << buffer << endl;
}
Text Text::toUpper( ) const
{
int i =0;
Text temp;
temp.bufferSize = bufferSize;
temp.buffer = new char(bufferSize);
for(i =0 ; buffer[i]; i++)
temp.buffer[i]=toupper(buffer[i]);
temp.buffer[i]= '';
return temp;
}
Text Text::toLower( ) const
{
int i =0;
Text temp;
temp.bufferSize = bufferSize;
temp.buffer = new char(bufferSize);
for(i =0 ; buffer[i]; i++)
temp.buffer[i]=tolower(buffer[i]);
temp.buffer[i]= '';
return temp;
}
bool Text::operator == ( const Text& other ) const
{
if(!strcmp(buffer, other.buffer))
return false;
else
return true;
}
bool Text::operator < ( const Text& other ) const
{
if(strcmp(buffer, other.buffer) < 0)
return true;
else
return false;
}
bool Text::operator > ( const Text& other ) const
{
if(strcmp(buffer, other.buffer) > 0)
return true;
else
return false;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.