From C-strings to C++ strings: Abstraction at Work

Slides:



Advertisements
Similar presentations
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 1 Chapter 9 Strings.
Advertisements

Chapter 10.
Arrays Hanly - Chapter 7 Friedman-Koffman - Chapter 9.
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved Standard.
How to Program in C++ CHAPTER 3: INPUT & OUTPUT INSTRUCTOR: MOHAMMAD MOJADDAM.
Chapter 7. 2 Objectives You should be able to describe: The string Class Character Manipulation Methods Exception Handling Input Data Validation Namespaces.
CS 117 Spring 2002 Review for Exam 3 arrays strings files classes.
C++ fundamentals.
Stream Handling Streams - means flow of data to and from program variables. - We declare the variables in our C++ for holding data temporarily in the memory.
Chapter 3 Vector Class. Agenda Design and Implementation of Vector class – add, get, set remove, copy, equals, ensureCapacity Hangman using Vector class.
File I/O ifstreams and ofstreams Sections 11.1 &
Chapter 9 I/O Streams and Data Files
File Input and Output in C++. Keyboard and Screen I/O #include cin (of type istream) cout (of type ostream) Keyboard Screen executing program input data.
CS Midterm Study Guide Fall General topics Definitions and rules Technical names of things Syntax of C++ constructs Meaning of C++ constructs.
File I/O 1 ifstreams and ofstreams Sections 11.1 & 11.2.
An Introduction to Programming with C++ Sixth Edition Chapter 14 Sequential Access Files.
Chapter 13 – C++ String Class. String objects u Do not need to specify size of string object –C++ keeps track of size of text –C++ expands memory region.
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved Stacks.
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved More about.
1 Simple File I/O Chapter 11 Switch Statement Chapter 12.
 2007 Pearson Education, Inc. All rights reserved C Arrays.
CHAPTER 2 PART #3 C++ INPUT / OUTPUT 1 st Semester King Saud University College of Applied studies and Community Service CSC1101 By: Fatimah.
Chapter 3: Input/Output. Objectives In this chapter, you will: – Learn what a stream is and examine input and output streams – Explore how to read data.
Input/Output. Objectives In this chapter you will: Learn what a stream is and examine input and output streams Explore how to use the input stream functions.
Brief Version of Starting Out with C++ Chapter 1 Introduction to Computers and Programming.
A FIRST BOOK OF C++ CHAPTER 14 THE STRING CLASS AND EXCEPTION HANDLING.
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February IO Streams  IOStreams are part of the Standard C++ library.
Copyright © 2006 Pearson Addison-Wesley. All rights reserved Today’s Lecture  I/O Streams  Console I/O  File I/O  Tools for File I/O  Sequential.
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved More about.
Chapter 3: Input/Output. Objectives In this chapter, you will: – Learn what a stream is and examine input and output streams – Explore how to read data.
Introduction Every program takes some data as input and generate processed data as out put . It is important to know how to provide the input data and.
Bill Tucker Austin Community College COSC 1315
Yan Shi CS/SE 2630 Lecture Notes
Standard C++ Input/Output and String Classes
C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 8: Namespaces, the class string, and User-Defined Simple Data Types.
Chapter 14: Sequential Access Files
Chapter 1.2 Introduction to C++ Programming
ifstreams and ofstreams
Chapter 1.2 Introduction to C++ Programming
Chapter 1.2 Introduction to C++ Programming
Chapter 1.2 Introduction to C++ Programming
Introduction to C++ Systems Programming.
More about OOP and ADTs Classes
COMP 2710 Software Construction File I/O
Copyright © 2003 Pearson Education, Inc.
C++ History C++ was designed at AT&T Bell Labs by Bjarne Stroustrup in the early 80's Based on the ‘C’ programming language C++ language standardised in.
Chapter 2 part #3 C++ Input / Output
Array Lists Chapter 6 Section 6.1 to 6.3
CS139 – Fall 2010 How far we have come
Lecture 5A File processing Richard Gesick.
Topics Introduction to File Input and Output
Introduction to C++ Programming
C++ STRINGS string is part of the Standard C++ Library
Operator Overloading.
More about OOP and ADTs Classes
Today’s Lecture I/O Streams Tools for File I/O
Chapter 3: Input/Output
CS150 Introduction to Computer Science 1
File I/O in C++ I.
CISC/CMPE320 - Prof. McLeod
Engineering Problem Solving with C++, Etter
7 Arrays.
Introduction to Data Structure
Capitolo 1 – Introduction C++ Programming
Chapter 2 part #3 C++ Input / Output
ifstreams and ofstreams
Topics Introduction to File Input and Output
Chapter 1 c++ structure C++ Input / Output
Lecture 3 More on Flow Control, More on Functions,
File I/O in C++ I.
Presentation transcript:

From C-strings to C++ strings: Abstraction at Work Chapter 5 Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Agenda Review: C++ I/O and <string> classes Where it began: C-strings and their problems Burying the problem: a simple MString class (M is for MPC!) Finding the Algorithm for string operations Syntax forms for MString operators Using MString in a typical application Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Chapter 5 Contents— Read it, it’s good! 5.1 The C++ Standard I/O Classes 5.2 The C++ String Types 5.3 Case Study: Text Editing 5.4 Introduction to Pattern Matching (optional) 5.5 Introduction to Data Encryption (optional) Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

REVIEW: The C++ Standard I/O Classes Input viewed as a stream of characters Flowing from some source into an executing program Output viewed as a stream of characters Flowing from program to output device Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

The C++ Standard I/O Classes C++ has <iostream> library istream for input ostream for output These are classes that model data streams Therefore, objects of these classes can be passed to functions Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

cin is a standard istream object The istream Class Models flow of characters from input device to program Characters enter an istream object Object transmits characters from device to program Input operator >> Extraction operator istreamObject >> variable; Stream states accessed with functions .good(), .bad(), .fail(), .eof() Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

The ostream Class Models flow of characters from executing program to output device Characters enter ostream object Transmitted to specified output device Output operator << Insertion operator ostreamObject << expression; Note Table 5-3 in text for Output Stream Operations and Methods Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

The ostream Class Standard ostream objects cout for normal output cerr and clog for error and diagnostic messages Buffered streams (cout and clog) Held in the stream until it is flushed Contrast cerr which is sent to the output device immediately Can cause confusion when debugging Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

File I/O: ifstream, ofstream Classes FileStream object must be constructed for purpose of receiving/sending I/O to files Called opening a stream to the file Stream activities Declaring ifstream inStream; Opening ifStream.open(file_name); Closing ifStream.close(); Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Output File Stream Example #include<fstream> #include<iostream> int main() Create a new file stream newfile { ofstream newfile; Connect newfile to the file on disk newfile.open("students.txt"); newfile<<“this is written to the file”; cout<<“this is written to the monitor”; newfile.close( ); return 0; Disconnect newfile stream }

Input from file of unknown size ifstream infile(“accounts.txt”); infile>>acntnum>>balance; while(infile) { // process last data // get next data } infile.close(); Check stream status after each read-if “true” process

A more compact version Process indefinite list in a file: while(infile>>acntnum>>balance) { // process data } Read data and Check status after each read

The I/O Class Hierarchy Characteristics of OOP hold Encapsulation Inheritance Polymorphism Note demo of file I/O, Fig 5-1 Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Passing Streams to Functions It may seem odd to pass cin,cout or a filestream to a function Needed to generalize moving of data Fairly unique to C++ Always pass by reference (use &) (so we don’t make a copy) Example: In some Student class… void Student::input(istream& in); void Student::output(ostream& out); in, out are placeholders for any input or output stream arguments Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Flexibility gained… Student s1(333, "Rebold", 3.4), s2; ofstream fout("data.txt"); ifstream fin("enrollments.txt"); s1.output(cout);  send to screen s2.input(cin);  read from keyboard s1.output(fout);  send to file “data.txt” s2.input(fin);  input from “enrollments.txt” But the syntax looks clumsy, so we overload the >> and << operators Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

REVIEW: The C++ <string> Class It’s a class…like you developed last week Variety of constructors provided for defining strings Define an empty string String s; Define a string initialized with another string String s("some other string"); Note further options in text, Table 5-7 String Constructors Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

C++ String Member Functions Editing operations provided such as appending inserting erasing replacing swapping Note table 5-10 in text, String Editing Operations Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Other C++ String Operations Copiers – make copies of part or all of a string Operators = and += Accessing Individual Characters Use overloaded subscript operator [ ] String element accessors Functions such as find(), find_first_of() See Table 5-12 in text Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Example <string> Operations Code string a="the"; a = a + " truth"; a.insert(" whole",3); a.erase(4,1); a.replace("alf",5); Also a.length(); returns a.find("half") returns a.find("t",2) returns Contents of a the the truth the whole truth the hole truth the half truth 13 4 9 Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

C++ <string> Comparisions Comparisons Overloaded operators for <, >, ==, etc. string a="the", b="whole"; (a<b) is true (a==b) is false (a=="the") is true note that “the” is a string literal Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Why are these useful? Essential for editing/processing documents Find/replace operations Count the number of occurrences of a word Moving files on a website, changing URLs Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Example: Managing a Website When files are relocated on a server, all webpages linking them have to be changed or links are broken http://terra.mpc.edu/~mpc01c01/project1/ becomes: http://terra.mpc.edu/~tom/csis1websS07/mpc01c01/public_html/project1/index.htm for mpc01c01 to mpc01c20…needs automation! Insert Insert Append Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

C-strings It wasn’t always this easy! Before C++ and object oriented programming, strings in C were represented by cumbersome character arrays: char name[10]; char name[10] = "Sax Winderhaven" OOPS! Too big Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

C-string Problems Memory management Lack of Features You always had to count letters to make sure the array was big enough Lack of Features Assignment, concatenation (append): yes Insert, Erase: tough luck! Comparision: yes, but confusing Frequent reading of documentation to clarify Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Solving the C-string Problem C++ with object oriented features allowed for the creation of a new class that works more logically and naturally. This class, <string>, is built on top of (using) the clumsy C-string operations This is another example of Abstraction Building an ideal/logical type that hides the messy details of an inferior, less effective set of tools. Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Today’s Lab Practice working with C-strings Develop a very simple MString class (i.e. MPC String) using C-string operations Develop general insert/erase operations (fairly complex array manipulations) Code comparison and other operators Use MString to solve text processing applications Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

More on C-strings C-strings use a \0 or “Null character” to indicate end of string (literally a binary 0) char name[10]="Felix“ When sizing the array, you must leave one extra cell for the null character Max number of letters in name[] is 9 F e l i x \0 Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

C-string Operations-- #include<cstring> strcpy(a,b); copies string b into string a this is like a=b; strcat(a,b); appends string b to end of a this is like a=a+b; OR a+=b; strlen(s); returns number of letters in s does not count null character strcmp(a,b); returns code for <, > or == Negative number: a < b is true Positive number: a > b is true Zero a == b is true Note: any capital letter comes before any lowercase letter i.e.: Z < a = true! Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

C-string I/O Luckily, the << and >> operators are defined for C-strings: char str[10]; cout<<"Enter a c-string"<<endl; cin>>str; cout<<"you entered: "<<str<<endl; Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Hands On Time Practice using C-strings Download and expand week5.zip Open Lab5Strings folder run Project.sln (currently with CStringDemo.cpp) Read and interpret output Add code where indicated Experiment with making the array sizes too small Watch for errors in output Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

The basic MString Class (M=MPC) MString: a new class built using C-string Constructors: default and explicit Input and output read() and print() member functions insertion << and extraction >> operators Wrappers around read and print Private data: a char array (C-string) Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

The class declaration This is also a C-string class MString { public: constructors: MString(); default MString(char *newStr); explicit void print(ostream& out) const; void read(istream& in); private: char myText[100]; a c-string }; This is also a C-string Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Examples using MString members MString text; default cnstr MString a("hello"); explicit cnstr a.print(cout); prints a to cout cout<<"Enter a string"<<endl; text.read(cin); reads text from cin cout<<"text = "<<text<<endl; operator<< cout<<"enter a new value"<<endl; cin>>text; operator>> Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

MString Class Definition const means print( ) will not change myText MString Class Definition MString::MString() { myText[0]=0; } MString::MString(char *newStr) strcpy(myText, newStr); void MString::print(ostream& out) const { out<<myText; } void MString::read(istream& in) in>>myText; Empty string Copy newStr to myText Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

The stream operators declared These are “free functions” not part of MString Output: ostream& operator<<(ostream& out, MString& s); Input: istream& operator>>(istream& in, MString& s); Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Logic behind the operators C++ treats operators as functions: The expression a+b is really operator+(a,b) This transformation is handled by the compiler Expression cout<<a is operator<<(cout,a) cout is passed to ostream& out a is passed to MString& s This explains the red part-- ostream& operator<<(ostream& out, MString& s); Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

What about the return type? When operations are chained: a + b + c Only one operator is processed at a time: a + b + c  operator+(a, b) operator+( , c) Or, think of it as operator+(operator+(a, b), c) operator+ must return same data type as a,b Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Above logic also applies to <<,>> When output operations are chained: cout<< a << b ; Only one operator is processed at a time: operator<<(cout, a) operator<<( , b) i.e. operator<<(operator<<(cout, a), b) Operator<< must return cout (thus… ostream& out , alias cout, is returned) Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Operators <<, >> defined Operators <<,>> are not MString members May not access myText Therefore we use the already defined read,print ostream& operator<<(ostream& out, MString& s) { s.print(out);  use the print function for s return out;  return the output stream } istream& operator>>(istream& in, MString& s) { s.read(in); return in; Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Hands On Time #2 Practice using MString Switch source files in Project In Solution Explorer, R-Click CStringDemo choose remove, remove (not delete) R-Click SourceFiles > Add > Existing Item choose StringDemo.cpp, hit + on SourceFile Then open StringDemo.cpp and run Add code where indicated to complete <<,>> Is MString improved over the C-string inside it? Is MString vulnerable to overflow like C-string? Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

The Improved MString class We want to add some additional features: length append erase comparison operators (<,>,==) insert concatenation op ( + ) We will work on StringDemo2.cpp See Lab5Strings.doc for instructions Half of the functions are solved in StringDemoHALF.cpp (use as hints if needed) More hints follow  Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Append Most functions in this lab come in pairs One for MString, one for C-string MString b("yes"), c("hello"); c.append(“, sir"); // the version for C-Strings b.append(c); // the version for M-Strings Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Prototypes for Append Similar pattern (C-string, MString) for most These functions just use strcat to do the job Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

StringDemo2.cpp layout Class declaration, definition and main in same file No need to worry about multi-file compilation Function definitions provided as shells Some default definitions so compiler is happy Just complete the definition of the functions as you go thru the lab Do not modify main until you get to Part 7&8 Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Length and EraseOneLetter Example use of functions MString s("ABCCDEFGHIJKL"); cout<<"String s = "<<s<<" and it's length = " <<s.length()<<endl;   s.eraseOneLetter(2); cout<<"After calling s.eraseOneLetter(2);"<<endl <<" s = "<<s<<" and is now length "<<s.length()<<endl; Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Prototypes Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Algorithm Development length() is easy (return strlen(myText);) What about eraseOneLetter(2) ?? Before, s= ABCCDEFGHIJKL After, s= ABCDEFGHIJKL Some kind of shifting required for loop If we try to guess it, we’ll most likely fail Is there a method to developing a correct alg.? Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Algorithm Method Start with a specific function call With specific data & arguments, i.e. MString s("ABCCDEFGHIJKL"); s.eraseOneLetter(2); 2. Draw a picture of data structure Before and after function is called Required for any assistance from instructor!! Write out statements without any loop Generalize into loop that works for all args Add assert to prevent bad calls Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Before & After: eraseOneLetter() Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Non-looping Specific Solution For our particular case, index (letter to erase) is 2 Statements to solve our example case: myText[2] = myText[3]; myText[3] = myText[4]; myText[4] = myText[5]; … myText[12] = myText[13];  why is this the last copy? Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Formulate the General Soln We can now see that 2 in the first statement is really index. 13 in the last statement is length of the string Therefore we can derive: void MString::eraseOneLetter(int index) { for (int k=index; k < strlen(myText); k++ myText[k] = myText[k+1]; } And check desired statements are produced Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Assert – easy debug check For eraseOneLetter( ) we should verify: index >= 0 index < strlen(myText) This becomes first line of function: assert(index>=0 && index < strlen(myText)); Bad call: s.eraseOneLetter(-1) Aborts program with “assertion failed” message Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

erase() Example use: s.erase(2,3); cout<<"After erasing 3 letters starting at cell 2,"<<endl <<" s = "<<s<<" and is now length "<<s.length()<<endl; Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

2 ways to erase() You can formulate the general solution using just a for loop as above Fastest execution speed You can use the eraseOneLetter function repeatedly in a for-loop Simpler code Slower to run 3. Either way you need a picture! Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3

Continue thru Lab5Strings.doc Solve for each member function Remember, hints are in StringDemo2HALF For 7 and 8, read files essay.txt and webpages.htm in same folder FYI: MString with Dynamic memory shown in StringDemo2Dynamic.cpp Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved. 0-13-140909-3