C++ string Class Chapter 6 1 Agenda String Basics (cin, getline ) string operations mixed I/O using >> & getline() Table Output using setw() Functions that take string parameters 2 What’s a string? A string is a sequence of letters in quotes “Hello” “C++ is fun!” “” (empty string) cout<<“This is a string literal”<<endl; ofstream fout(“accnts.txt”); this is also a string literal 3 A string variable stores strings string s1; // empty string string s2 = “Hello World”; string s3(60, ‘*’); //s3 contains 60 asterisks s1=s2; //copy string s2 into s1 cout<<“String s1 holds ”<<s1<<endl; cout<<s3<<endl; 4 #include <string> to use string string is a class that was created in ’98 to improve on C-strings (tedious arrays of char) The whole C++ standard was revised as well Keep using these post ’98 libraries : #include <iostream> #include <string> using namespace std; 5 #include Libraries should be consistent Pre ’98 Standard Post ’98 Standard <iostream.h> <fstream.h> <iomanip.h> <math.h> <stdlib.h> <string> new C++ string <string.h> old C-string <iostream> <fstream> <iomanip> <cmath> <cstdlib> <string> new C++ string <cstring> old C-string You must also add using namespace std; 6 string I/O cin and cout (<< and >> ) work the same cout<<“Enter two strings”<<endl; cin>>s1>>s2; // whitespace separates strings You type You get Gong Li s1 s2 Gong Li Problem: How do you get s1 to hold “Gong Li” ??? 7 string input with getline( ) problem 2 getline( ) Reads everything until a ‘\n’ is found getline(cin, s1); getline(cin, s2); You type Gong Li Quoth the Raven, “Nevermore!” You get s1 Gong Li s2 Quoth the Raven, “Nevermore!” 8 Agenda String Basics (cin, getline ) string operations mixed I/O using >> & getline() Table Output using setw() Functions that take string parameters 9 C++ string operations problem 4 Length of a C++ string can be found as : s.length(); // returns length of s C++ strings can be compared using relational operators like : if(s2 < s5) //… if(name == “Jones”) C++ strings can be concatenated and appended using the + and the += operators : string s6 = s5 + “HIJK”; s2 += s5; 10 String quiz T/F T/F T/F (“Salty” < “Sweet”) (“aardvark” == “Aardvark”) (“John” > “john”) What does full hold? string last=“Woods”, first = “Tiger”, full; a) full = first + last; _______________ b) full = first + “ “ + last; _______________ c) full = last + “, ” + first; _______________ What does k hold? int k = first.length( ); _______________ 11 Do Lab5 Problems 1-4 12 Agenda String Basics (cin, getline ) string operations mixed I/O using >> & getline() Table Output using setw() Functions that take string parameters 13 Warning—weird behavior mixing >> and getline( ) problem 5 string name; int age; cout << "Enter your age: "; cin >> age; cout << "Name (first last): "; getline (cin, name); cout << name << ", you don't look " << age << ".\n"; Console Enter your age: 43 Name (first last): , you don’t look 43. 14 Warning—weird behavior mixing >> and getline( ) problem 5 string name; int age; cout << "Enter your age: "; cin >> age; does not remove enter key (‘\n’) cout << "Name (first last): "; cin.ignore (80, '\n'); ignores ‘\n’ left by cin>> getline (cin, name); cout << name << ", you don't look " Console << age << ".\n"; Another option: use >> to read the string or strings (instead of getline) Enter your age: 43 Name (first last):Al Short Al Short, you don’t look 43. 15 Agenda String Basics (cin, getline ) string operations mixed I/O using >> & getline() Table Output using setw() Functions that take string parameters 16 #include<iomanip> Creating Space in Output The setw function specifies the number of spaces for the next item Applies only to the next item of output Example: To print the digit 7 in four spaces use outfile<<setw(4)<< 7 << endl; Three of the spaces will be blank 7 7 <<left<< Slide 17 Application of setw( ) problem 6 Produces a table of square roots int n; cout << " N sqrt(N)" << endl; cout << "-----------" << endl; cout << fixed << showpoint<<setprecision(3); Sets column width for (n=1; n<=10; n++) { cout << setw(2) << n; cout << setw(8) << sqrt(n); cout << endl; } 18 Application of setw( ) problem 7 Produce a formatted table of strings and numbers const double RATE = 4.55; int tutor; int hours; string name; ofstream fout("output.txt"); Notice Left and right justification for (tutor=1; tutor<=3; tutor++) { cout << "Tutor's name and hours worked: "; cin >> name >> hours; fout << fixed << showpoint << setprecision(2); fout << left<< setw(15) << name << right << setw(10)<< hours << setw(10) << hours*RATE << endl; } 19 Do 5,6,7 (skip 8 for now) and 9 20 Agenda String Basics (cin, getline ) string operations Table Output using setw() string I/O using >> & getline() Functions that take string parameters 21 Passing strings to functions Just like other parameters, strings can be passed to and returned from functions string AddJunior(string name) { name=name+”, Jr.”; return name; } FUNCTION CALL: string son; son=AddJunior(“Hank Williams”); 22 Finally !!! … THE END 23