Answered step by step
Verified Expert Solution
Question
1 Approved Answer
Please write in C++ headerfile // FILE: mystring.h // CLASS PROVIDED: my_string // This is a simple version of the Standard Library string. // It
Please write in C++
headerfile
// FILE: mystring.h // CLASS PROVIDED: my_string // This is a simple version of the Standard Library string. // It is part of the namespace main_savitch_4, from the textbook // "Data Structures and Other Objects Using C++" // by Michal Main and Walter Savitch // // CONSTRUCTOR for the my_string class: // string(const char str[ ] = "") -- default argument is the empty string. // Precondition: str is an ordinary null-terminated string. // Postcondition: The string contains the sequence of chars from str. // // CONSTANT MEMBER FUNCTIONS for the my_string class: // size_t length( ) const // Postcondition: The return value is the number of characters in the // string. // // char operator [ ](size_t position) const // Precondition: position >(istream& ins, string& target) // Postcondition: A string has been read from the istream ins, and the // istream ins is then returned by the function. The reading operation // skips white space (i.e., blanks, newlines, tabs) at the start of ins. // Then the string is read up to the next white space or the end of the // file. The white space character that terminates the string has not // been read. // // ostream& operator =, , and // Provides size_t namespace hw4 { class my_string { public: // CONSTRUCTORS and DESTRUCTOR my_string(const char str[ ] = ""); my_string(const my_string& source); ~my_string( ); // MODIFICATION MEMBER FUNCTIONS void operator +=(const my_string& addend); void operator +=(const char addend[ ]); void operator +=(char addend); void reserve(size_t n); void operator =(const my_string& source); void insert(size_t n); // CONSTANT MEMBER FUNCTIONS size_t length( ) const { return current_length; } char operator [ ](size_t position) const; // FRIEND FUNCTIONS friend std::ostream& operator =(const my_string& s1, const my_string& s2); friend bool operator (const my_string& s1, const my_string& s2); friend bool operator >(std::istream& ins, my_string& target); void getline(std::istream& ins, my_string& target); void eat_white(std::istream& ins, my_string& target); } #endif
mystring.cpp file
// CLASS IMPLEMENTED: my_string (see mystring.h for documentation) // INVARIANT for the my_string class: // 1. The string is stored as a null-terminated string in the dynamic array // that characters points to. // 2. The total length of the dynamic array is stored in the member variable // allocated. // 3. The total number of characters prior to the null character is stored in // current_length, which is always less than allocated. #includeRefer to the documenting and submitting homework from here. Here is the complete implementation of mystring.h and mystring.cpp. This is similar to STL string, but it does not include all features available from STL string. For the educational purpose, we focus on using our own implementation of various string data structures and functions. Take a close look at each function, how dynamic arrays are handled, and how operator overloadings for various functions are implemented. Using the mystring.h and mystring.cpp, you're not supposed to use STL string for this homework) 1) implement a text file formatting program. It takes a text file data.txt as an input file. The file name can be hard-coded in your program or take a file name as a command line parameter. The file has a few lines of text but the length(column) of the line is arbitrary. One line could have anywhere between 1 to 200 characters before a new line (carriage return). Your program should ask the number of column to the user and format the text file accordingly. For example, if a user types 65, every line should be aligned 65 long. You may have to combine two lines to one to eliminate the white spaces and blank lines, or split one to two. 2) in cases you need to change line in the middle of a word, you need to use a hyphen (-) to connect a word between two lines. 3) There should be no more than one white space between two words. Multiple spaces, newlines or tabs must be replaced with a space. You can assume that a hyphen can be added after the maximum column. So if you're formatting a text to 60 columns and a word is starting at the 60th column, you can add hyphen at 61st. Only the hyphen can come at 61st. For the output, display the formatted text on screen and save it to data.out file. Refer to the documenting and submitting homework from here. Here is the complete implementation of mystring.h and mystring.cpp. This is similar to STL string, but it does not include all features available from STL string. For the educational purpose, we focus on using our own implementation of various string data structures and functions. Take a close look at each function, how dynamic arrays are handled, and how operator overloadings for various functions are implemented. Using the mystring.h and mystring.cpp, you're not supposed to use STL string for this homework) 1) implement a text file formatting program. It takes a text file data.txt as an input file. The file name can be hard-coded in your program or take a file name as a command line parameter. The file has a few lines of text but the length(column) of the line is arbitrary. One line could have anywhere between 1 to 200 characters before a new line (carriage return). Your program should ask the number of column to the user and format the text file accordingly. For example, if a user types 65, every line should be aligned 65 long. You may have to combine two lines to one to eliminate the white spaces and blank lines, or split one to two. 2) in cases you need to change line in the middle of a word, you need to use a hyphen (-) to connect a word between two lines. 3) There should be no more than one white space between two words. Multiple spaces, newlines or tabs must be replaced with a space. You can assume that a hyphen can be added after the maximum column. So if you're formatting a text to 60 columns and a word is starting at the 60th column, you can add hyphen at 61st. Only the hyphen can come at 61st. For the output, display the formatted text on screen and save it to data.out file// Provides stream tools #include // Provides assert() #include // Provides strcpy(), strcat(), strlen(), strcmp() #include // Provides size_t, NULL #include // Provides stream types #include "mystring.h" using namespace std; namespace hw4 { // CONSTRUCTORS and DESTRUCTOR my_string::my_string(const char str[ ]) // Library facilities used: string.h { current_length = strlen(str); allocated = current_length + 1; sequence = new char[allocated]; strcpy(sequence, str); } my_string::my_string(const my_string& source) // Library facilities used: string.h { sequence = new char[source.allocated]; current_length = source.current_length; allocated = source.allocated; strcpy(sequence, source.sequence); } my_string::~my_string( ) { delete [ ] sequence; } // MODIFICATION MEMBER FUNCTIONS // CONSTANT MEMBER FUNCTIONS // In-lined: size_t length( ) const; char my_string::operator [ ](size_t position) const // Library facilities used: assert.h { assert(position n+1; --i) sequence[i] = sequence[i-1]; sequence[n+1] = '-'; } else // Insert hyphen at column position { for (int i=current_length; i>n; --i) sequence[i] = sequence[i-1]; sequence[n] = '-'; } } // = Operator overloading. void my_string::operator =(const my_string& source) { size_t i; char *new_string; if (allocated != source.allocated) { new_string = new char[source.allocated]; delete [ ] sequence; sequence = new_string; allocated = source.allocated; } current_length = source.current_length; for (i=0; i = Operator overloading. bool operator >=(const my_string& s1, const my_string& s2) // Library facilities used: string.h { int comp = strcmp(s1.sequence, s2.sequence); return ((comp>0)||(comp==0)); } // Operator overloading. bool operator > (const my_string& s1, const my_string& s2) // Library facilities used: string.h { int comp = strcmp(s1.sequence, s2.sequence); return (comp>0); } // > Operator overloading. istream& operator >>(istream& ins, my_string& target) { char c; while (ins && isspace(ins.peek())) ins.ignore(); target=""; // Set the target to the empty string. while (ins && !isspace(ins.peek())) { ins >> c; target += c; // Call the operator += with a char argument. } return ins; } void getline(istream& ins, my_string& target) { char c; eat_white(ins, target); // Removes initial whitespace target=""; ins.get(c); while (ins && (c!=' ')) { target += c; if (ins && isspace(ins.peek()) && ins.peek()!=' ') { eat_white(ins, target); // Removes additional // whitespace between words target += ' '; } ins.get(c); } } void eat_white(istream& ins, my_string& target) { while (ins && isspace(ins.peek())) ins.ignore(); } }
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started