CSCE 110 PROGRAMMING FUNDAMENTALS WITH C++ Prof. Amr Goneid AUC Part 8. Characters & Strings Prof. amr Goneid, AUC 1
Characters & Strings Prof. amr Goneid, AUC 2
Characters & Strings Characters & their Operations The String Class: String Objects Declaration Input and Output Member Functions: Length & Indexing Copying , Concatenation & Comparison Other Member Functions Passing String Objects Arrays of Strings Conversions Prof. amr Goneid, AUC 3
1. Characters & their Operations Characters: e.g. ‘A’ Character Constants & Variables: e.g. const char qmark = ‘?’ ; char c; I/O : e.g. cin >> c; cout << c; Comparison: e.g. (c >= ‘A’) && (c <= ‘Z’) Character Arrays: e.g. char a[20]; Type casting: e.g. int(‘A’) char(65) Prof. amr Goneid, AUC 4
Some Character Manipulation Functions Conversion (to) Functions: toupper & tolower e.g. char a , b ; b = toupper(a); is Functions: return true or false isalpha (A – Z , a – z) isdigit (0 – 9) isalnum (A – Z, a – z , 0 – 9) islower (a – z) isupper (A – Z) Prof. amr Goneid, AUC 5
2. The String Class: String Objects String Class: Now part of standard library Use #include <string> Strings are “objects” of this class, Member functions can be used Useful Link: www.cs.utexas.edu/~jbsartor/cs105/CS105_spr10_lec2.pptx.pdf 0 1 2 S t r i n g s a r e O b j e c t s character length-1 Prof. amr Goneid, AUC 6
3. Declaration String Literals: “Hello” Constant strings: const string greeting = “Hello ”; String Objects: string firstName, lastName; string wholeName; string greeting = “Hello “; Prof. amr Goneid, AUC 7
C-Style Strings C language has no predefined string data type. It uses character arrays to store strings but appends a null character ‘\0’ at the end of the string. 0 1 2 \0 E a g l e e.g. char bird[ ] = “Eagle”; Some C-Style functions are used on C++ strings after converting them to C-style Prof. amr Goneid, AUC 8
Converting to C-Style Strings Example: to convert a character array containing digits into its integer value. int atoi(const char s[]) Use the c_str member function to convert a string into a character array. Example: string year = “2015"; int y = atoi(year.c_str()); Prof. amr Goneid, AUC 9
4. Input & Output Use extraction operator >> and the stream cin for input ( stops at a blank) cin >> firstName; Use insertion operator << and the stream cout for output cout << greeting << wholeName << endl; Prof. amr Goneid, AUC 10
Input & Output getline (cin, wholeName, term ); reads all characters typed in from the keyboard (including blanks) up to the character stored in term. Such character will not be added to the string. getline (cin, wholename); will assume the default termination character (end of line or ‘\n’) Prof. amr Goneid, AUC 11
5. Member Functions: Length & Indexing Dot notation used to call an objects member functions wholeName.length(); wholeName.at(i) Applies member function length and at to string object wholeName 1 st Function returns the objects length 2 nd Function returns character at location [i] in string object ( equivalent to wholeName [i] ) Prof. amr Goneid, AUC 12
6. Copying , Concatenation & Comparison Stores the first and last name wholeName = firstName + “ “ + lastName; Concatenation + joins the two objects together “ “ for string values not ‘ ‘ Compare two strings using == < > <= >= != if ( myName == wholeName ) ……. Prof. amr Goneid, AUC 13
Example Build Inverse String: string aword , invword; cin >> aword; invword = “”; // Null String for (i = aword.length()-1; i >= 0; i--) invword += aword.at(i); cout << invword; Prof. amr Goneid, AUC 14
StringOperations.cpp // FILE: StringOperations.cpp // ILLUSTRATES STRING OPERATIONS #include <iostream> #include <string> using namespace std; int main () { string firstName, lastName; string wholeName; string greeting = "Hello "; cout << "Enter your first name: "; cin >> firstName; Prof. amr Goneid, AUC 15
StringOperations.cpp cout << "Enter your last name: "; cin >> lastName; // Join names in whole name wholeName = firstName + " " + lastName; // Display results cout << greeting << wholeName << '!' << endl; cout << "You have " << (wholeName.length () - 1) << " letters in your name." << endl; Prof. amr Goneid, AUC 16
StringOperations.cpp // Display initials cout << "Your initials are " << (firstName.at(0)) << (lastName.at(0)) << endl; return 0; } Prof. amr Goneid, AUC 17
StringOperations.cpp Program output Enter your first name: Caryn Enter your last name: Jackson Hello Caryn Jackson! You have 12 letters in your name. Your initials are CJ Prof. amr Goneid, AUC 18
7. Other Member Functions: .find .append .insert .swap .replace .c_str .erase .assign .substr .empty Prof. amr Goneid, AUC 19
.find message.find(c) or message.find(sub) returns position of character (c) or start of substring (sub) in message . If (c) or (sub) do not exist in message , function returns a long integer > message.length(). e.g. message = “one two three”; message.find(‘e’) returns 2 message.find(“two”) returns 4 Prof. amr Goneid, AUC 20
.insert message.insert( s , newstring) returns message after inserting newstring starting at location (s) e.g. message = “abcd”; s1 = “klm”; message.insert(2 , s1); changes message to be “abklmcd” Prof. amr Goneid, AUC 21
.replace message.replace(s , n , newstring) returns message after replacing (n) characters by newstring starting at location (s) e.g. message = “during last week”; message.replace(12 , 4 , “month”) changes message to “during last month” Prof. amr Goneid, AUC 22
Example Search and replace: p = message.find(sub); if ((p >= 0) && (p < message.length())) message.replace(p,sub.length() , news); else cout << sub << “ not found” << endl; Prof. amr Goneid, AUC 23
.erase message.erase(s , n) returns message after deleting n characters starting at location (s) e.g. message = “one two three”; message.erase(3 , 4) changes message to “one three” Prof. amr Goneid, AUC 24
.assign message.assign(olds , s , n) starting at location (s) in olds, assign to message the next n characters. e.g. olds = “abcdef”; message.assign(olds , 2 , 3) changes message to “cde” Prof. amr Goneid, AUC 25
.substr message.substr( s , n) return the substring consisting of (n) characters starting at location (s) in message e.g. message = “Good Morning”; cout << message.substr(0 , 2); outputs “Go” Prof. amr Goneid, AUC 26
.empty() message.empty() returns true if message is an empty string, false otherwise e.g. if (message.empty()) ………. Prof. amr Goneid, AUC 27
.append(str) s.append(s1) returns s after appending s1 at its end e.g. if s = “Last”; s.append(“ Month”); changes s to be “Last Month” Prof. amr Goneid, AUC 28
.swap(str) s.swap(s1) swaps contents of s and s1 e.g. if s = “First”; s1 = “Second”; s.swap(s1); changes s to be “Second” and s1 to be “First” Prof. amr Goneid, AUC 29
.c_str() s.c_str( ) will return a constant character array having the contents of s and terminated by a null character ‘\0’, i.e. a C_style string e.g. const char *cstr; cstr = cppstr.c_str(); Prof. amr Goneid, AUC 30
8. Passing String Objects String objects are passed like ordinary variables, i.e., either by value or by reference. If the string is input only, pass by value, e.g. void doit (string s) If the string is Output or Inout, pass by reference, e.g. void doit (string& s) Prof. amr Goneid, AUC 31
Example void moneyToNumberString (string& moneyString) { // Local data . . . int posComma; // position of next comma // Remove $ from moneyString if (moneyString.at(0) == '$') moneyString.erase(0, 1); else if (moneyString.find("-$") == 0) moneyString.erase(1, 1); Prof. amr Goneid, AUC 32
Example (cont) // Remove all commas posComma = moneyString.find(","); while (posComma >= 0 && posComma < moneyString.length()) { moneyString.erase(posComma, 1); posComma = moneyString.find(","); } } // end moneyToNumberString Prof. amr Goneid, AUC 33
9. Arrays of Strings Strings can be elements of arrays. string names[100]; declares an array of 100 strings. names[i] refers to string [i] in the array. names[i].at(j) refers to character (j) of string [i]. names[i] [j] the same as above Prof. amr Goneid, AUC 34
10. Conversions A c_string of digits can be converted into a number using one of the following functions: Atoi(c_string) returns type int Atol(c_string) returns type long Atof(c_string) returns type double Prof. amr Goneid, AUC 35
Recommend
More recommend