Computer Programming- Lecture 6

18,998 views
20,865 views

Published on

C++ Strings

Published in: Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
18,998
On SlideShare
0
From Embeds
0
Number of Embeds
14,169
Actions
Shares
0
Downloads
182
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Computer Programming- Lecture 6

  1. 1. Lecture 6 C++ Strings 1TCP1231 Computer Programming I
  2. 2. Objectives Understand the basic types of strings. Define and use the string class and C-type strings. Read and write strings. Access and manipulate characters or sub- strings within a string. Concatenate and compare strings. Insert, replace, swap, or erase a sub-string in a string. 2 TCP1231 Computer Programming I
  3. 3. String Taxonomy 3TCP1231 Computer Programming I
  4. 4. String Formats 4TCP1231 Computer Programming I
  5. 5. The Standard string Class The string class allows the programmer to treat strings as a basic data type  No need to deal with the implementation as with C-strings The string class is defined in the string library and the names are in the standard namespace  To use the string class you need these lines: #include <string> using namespace std; 5 TCP1231 Computer Programming I
  6. 6. C++ StringNotes The extraction operator stops at whitespace. To read a string with spaces, we must use getline. The string input /output operators and functions are defined in the string header file, not the I/O stream header file 6 TCP1231 Computer Programming I
  7. 7. string Constructors The default string constructor initializes the string to the empty string Another string constructor takes a C-string argument  Example: string phrase; // empty string string noun("ants"); // a string version // of "ants" 7 TCP1231 Computer Programming I
  8. 8. #include <iostream>#include <iomanip>#include <string> Demonstrateusing namespace std;int main () String{ string s1; string s2 ("Hello World"); Constructors string s3 (s2); string s4 (5, A); string s5 (s2, 6); string s6 ("Hello", 2); string s7 ("Hello", 3, 2); Value of s1: Value of s2: Hello World cout << "Value of s1: " << s1 << endl; Value of s3: Hello World cout << "Value of s2: " << s2 << endl; cout << "Value of s3: " << s3 << endl; Value of s4: AAAAA cout << "Value of s4: " << s4 << endl; Value of s5: World cout << "Value of s5: " << s5 << endl; Value of s6: He cout << "Value of s6: " << s6 << endl; Value of s7: lo cout << "Value of s7: " << s7 << endl; return 0;} // main 8 TCP1231 Computer Programming I
  9. 9. string class in C++ Standard Library#include <iostream>#include <string>using namespace std;int main() { char cstr[] = "Hi"; string s1,s2; string s3 = "hello"; must #include <string> and use namespace std string s4("aloha"); string s5 = cstr; construct empty string string s6(cstr); construct a string based on c-String string s7(s3); [] cout << "[" << s1 << "]" << endl; construct a cout << "[" << s2 << "]" << endl; string based on [] another string cout << "[" << s3 << "]" << endl; [hello] cout << "[" << s4 << "]" << endl; [aloha] cout << "[" << s5 << "]" << endl; cout << "[" << s6 << "]" << endl; [Hi] cout << "[" << s7 << "]" << endl; [Hi]} [hello] 9 TCP1231 Computer Programming I
  10. 10. Assignment of Strings Variables of type string can be assigned with the = operator  Example: string s1, s2, s3; … s3 = s2; Quoted strings are type cast to type string  Example: string s1 = "Hello Mom!"; 10 TCP1231 Computer Programming I
  11. 11. When assigning string to a c++ string,#include <iostream> we do not need to worry about whether#include <string> there is enough memory allocated orusing namespace std; not, the string will automatically adjustint main() { its size if there is not enough memory char cstr[] = "Arnold"; allocated. string s1,s2,s3; assigning c-string into c++ string s1 = cstr; s2 = "Schwarzenegger"; assigning a c++ string into another c++ s3 = s1; string cout << "[" << s1 << "]" << endl; cout << "[" << s2 << "]" << endl; [Arnold] cout << "[" << s3 << "]" << endl; [Schwarzenegger]} [Arnold]We can assign a C-strings or C++ strings directly into a C++string without needing to use the strcpy() functions as in C-string. The strcpy() function can only be used with C-strings. 11 TCP1231 Computer Programming I
  12. 12. #include <iostream>#include <string> Stringusing namespace std;int main () Assignment{ string str1 ("String 1"); string str2; string str3; string str4; string str5 = "String 5"; cout << "String 1: " << str1 << endl; str2 = str1; cout << "String 2: " << str2 << endl; str3 = "Hello"; String 1: String 1 cout << "String 3: " << str3 << endl; String 2: String 1 str4 = A; cout << "String 4: " << str4 << endl; String 3: Hello cout << "String 5: " << str5 << endl; String 4: A return 0; String 5: String 5} // main 12 TCP1231 Computer Programming I
  13. 13. I/O With Class string The insertion operator << is used to output objects of type string  Example: string s = "Hello Mom!"; cout << s; The extraction operator >> can be used to input data for objects of type string  Example: string s1; cin >> s1; 13 TCP1231 Computer Programming I
  14. 14. getline and Type string A getline function exists to read entire lines into a string variable  This version of getline is not a member of the istream class, it is a non-member function  Syntax for using this getline is different than that used with cin: cin.getline(…) Syntax for using getline with string objects: getline(Istream_Object, String_Object); 14 TCP1231 Computer Programming I
  15. 15. getline Example This code demonstrates the use of getline with string objects  string line; cout "Enter a line of input:n"; getline(cin, line); cout << line << "END OF OUTPUTn"; Output could be: Enter some input: Do be do to you! Do be do to you!END OF OUTPUT 15 TCP1231 Computer Programming I
  16. 16. #include <iostream>#include <string> getline similar to the cin.getline() function to readusing namespace std;int main() { characters into C-string from user, string s; however, for the C++-string, the cin is one of the parameter of the getline() function. cout << "=> "; cin >> s; cin.ignore(1000,n); cout << s << endl; cout << "=> "; getline(cin, s); => how are you? i am fine cout << s << endl; how => how are you? i am fine cout << "=> "; getline(cin, s, ?); how are you? i am fine cout << s << endl; => how are you? i am fine} how are you 16 TCP1231 Computer Programming I
  17. 17. getline#include <iostream>#include <iomanip>#include <string>#include <conio.c>using namespace std;int main (){ cout << "Enter Your Name in the form lastname,firstname: "; string lName; string fName; getline (cin, lName, ,); getline (cin, fName); cout << "Your Name is: " << fName << " " << lName; getch(); return 0; Enter Your Name in the form lastname,firstname:} // main Azli, Fikri Your Name is: Fikri Azli 17 TCP1231 Computer Programming I
  18. 18. More Examples#include <iostream> #include <iostream>#include <string> #include <string>#include <conio.c> #include <conio.c>using namespace std; using namespace std;int main () int main (){ { cout << "Enter some words. n"; cout << "Enter some words. n"; string strIn; string strIn; while (cin >> strIn) while (getline(cin, strIn)) cout << strIn << endl; cout << strIn << endl; cout << “The End"; cout << “The End"; getch(); getch(); return 0; return 0;} // main } // main 18 TCP1231 Computer Programming I
  19. 19. ignore ignore is a member of the istream class ignore can be used to read and discard all the characters, including n that remain in a line  Ignore takes two arguments  First, the maximum number of characters to discard  Second, the character that stops reading and discarding  Example: cin.ignore(1000, n); reads up to 1000 characters or to n 19 TCP1231 Computer Programming I
  20. 20. String Processing The string class allows the same operations we used with C-strings…and more  Characters in a string object can be accessed as if they are in an array  last_name[i] provides access to a single character as in an array  Index values are not checked for validity! 20 TCP1231 Computer Programming I
  21. 21. Member Function at at is an alternative to using [ ]s to access characters in a string.  at checks for valid index values  Example: string str("Mary"); cout << str[6] << endl; cout << str.at(6) << endl; str[2] = X; str.at(2) = X; 21 TCP1231 Computer Programming I
  22. 22. Member Function length The string class member function length returns the number of characters in the string object:  Example: int n = string_var.length( ); 22 TCP1231 Computer Programming I
  23. 23. Comparison of strings Comparison operators work with string objects  Objects are compared using lexicographic order (Alphabetical ordering using the order of symbols in the ASCII character set.)  = = returns true if two string objects contain the same characters in the same order  Remember strcmp for C-strings?  <, >, <=, >= can be used to compare string objects 23 TCP1231 Computer Programming I
  24. 24. #include <iostream>#include <string>using namespace std; Stringint main () { string str1 ("ABC Company"); string str2 ("ABC"); Comparisons string str3 ("ABC"); if (str1 == str2) cout << "str1 == str2" << endl; if (str1 > str2) cout << "str1 > str2" << endl; if (str1 < str2) cout << "str1 < str2" << endl; if (str2 == str3) str1 > str2 cout << "str2 == str3" << endl; str2 == str3 return 0;} // main 24 TCP1231 Computer Programming I
  25. 25. Using + With strings (Concatenation) Variables of type string can be concatenated with the + operator  Example: string s1, s2, s3; … s3 = s1 + s2;  If s3 is not large enough to contain s1 + s2, more space is allocated More specific, use append:  append(string &str, size_t offset, size_t count);  append(string &str);  append(size_t count, char ch); 25 TCP1231 Computer Programming I
  26. 26. #include <iostream>#include <string>using namespace std; Stringint main () { Concatenation string str1 = "This is "; string str2 = "a string"; This is a string string str3; Begin append: This is a string str3 = str1 + str2; cout << str3 << endl; Append method: This is a string string Append characters: This is a string!!!!! cout << "nBegin append: "; str1 = str1 + str2; We can add/concatenate C++ cout << str1 << endl; strings, C-strings or characters into a C++ string to form a new str1.append(str2, 1, string::npos); C++ string using the + operator cout << "Append method: " << str1 << endl; without needing to use the strcat() functions as in C-string. str3.append(5, !); The strcat() function can only cout << "Append characters: " << str3; be used with C-strings. return 0;} 26 TCP1231 Computer Programming I
  27. 27. String Extraction Access the substring of the calling string starting at position and having length characters Format str.substr(position, length); 27 TCP1231 Computer Programming I
  28. 28. #include <iostream>#include <string>using namespace std; Stringint main () { string str1 = "Concatenation"; Extraction string str2; cout << "str1 contains: " << str1 << endl; cout << "str2 contains: " << str2 << endl; cout << “t 0123456789012" << endl; str2 = str1.substr(); cout << "str2 ==> 1: " << str2 << endl; str1 contains: Concatenation str2 = str1.substr(5, 3); cout << "str2 ==> 2: " << str2 << endl; str2 contains: 0123456789012 str2 = str1.substr(5); str2 ==> 1: Concatenation cout << "str2 ==> 3: " << str2 << endl; return 0; str2 ==> 2: ten} str2 ==> 3: tenation 28 TCP1231 Computer Programming I
  29. 29. Find string Format str.find(str1); returns index of the first occurrence of str1 in str str.find(str1, pos); returns index of the first occurrence of string str1 in str, the search starts at position pos. str.find_first_of(str1, pos); returns index of the first instance in str of any character in str1, starting the search at position pos. str.find_first_not_of(str1, pos); returns index of the first instance in str of any character not in str1, starting the search at position pos. 29 TCP1231 Computer Programming I
  30. 30. #include <iostream>#include <string> Findusing namespace std;int main (){ int where; string str1 = "ccccatenatttt"; where = str1.find("ten"); cout << ""ten" at: " << where << endl; where = str1.find("tin"); if (where != string::npos) cout << ""tin" at: " << where << endl; else cout << ""tin" not at: " << where << endl; "ten" at: 5 "tin" not at: -1 return 0;} Page 598 30 TCP1231 Computer Programming I
  31. 31. #include <iostream> Find#include <string>using namespace std; return the index of the first occurrence of stringint main() { "be" within s1 starting from position 0. string s1 = "...to be, or... not to be!"; string s2 = "be"; return the index of the first occurrence of string s3; string "be" within s1 starting from position 8. s3 = s1.substr(6,13); cout << s3 << endl; cout << s1.find(s2) << endl; cout << s1.find("be") << endl; cout << s1.find("be",0) << endl; cout << s1.find("be",8) << endl; return 0; be, or... not} 6 6 6 23 31 TCP1231 Computer Programming I
  32. 32. #include <iostream>#include <string> Findusing namespace std; returns the index of the first instance in s1 of anyint main() { character in s2, starting string s1 = "...to be, or... not to be!"; string s2 = "aeiou"; the search at position 11. string s3 = ",.!"; cout << s1.find_first_of(s2,0) << endl; cout << s1.find_first_of(s2,11) << endl; cout << s1.find_first_not_of(s3,0) << endl; cout << s1.find_first_not_of(s3,12) << endl;} 4 17 returns the index of the first 3 instance in s1 of any character 15 NOT in s2, starting the search at position 12. 32 TCP1231 Computer Programming I
  33. 33. Insert string Inserts str2 into str beginning at position pos. str.insert(pos, str2); Inserts str2, beginning at position start of length length, into str beginning at position pos. str.insert(pos, str2, start, length); 33 TCP1231 Computer Programming I
  34. 34. #include <iostream>#include <string>using namespace std; Insertionint main (){ string str1 = "This is Test"; string str2 = "tell me if, are you sure"; cout << "str1 ==>0: " << str1 << endl; str1.insert(8, "a "); cout << "str1 ==>1: " << str1 << endl; str1.insert(14, str2, 10, 14); cout << "str1 ==>2: " << str1 << endl; str1 = str1.insert(str1.length(), 3, ?); cout << "str1 ==>3: " << str1 << endl; return 0; str1 ==>0: This is Test} str1 ==>1: This is a Test str1 ==>2: This is a Test, are you sure str1 ==>3: This is a Test, are you sure??? TCP1231 Computer Programming I 34
  35. 35. Replace the string str1.replace(pos, len, str2); replace the str1 with str2 beginning at position pos of length len str1.replace(pos, len, str2, start, length); replace the str1, beginning at position pos of length len, with str2 beginning at position start of length length 35 TCP1231 Computer Programming I
  36. 36. #include <iostream>#include <string> Replacementusing namespace std;int main () { string str1 = "My Name was Omar Ahmad"; string str2 = "My Last Name is Zaqaibeh"; cout << "str1 ==>0: " << str1 << endl; str1.replace(8, 3, "is"); cout << "str1 ==>1: " << str1 << endl; str1 ==>0: My Name was Omar Ahmad str1 ==>1: My Name is Omar Ahmad str1.replace(15, 6, str2, 15, 9); str1 ==>2: My Name is Omar Zaqaibeh cout << "str1 ==>2: " << str1 << endl; str1 ==>3: What is Your Name? str1.replace(0, str1.length(), "What is Your Name?"); cout << "str1 ==>3: " << str1 << endl; return 0;} 36 TCP1231 Computer Programming I
  37. 37. #include <iostream>#include <string>using namespace std; Erase,int main () { string str1 = "This is one string"; string str3; Clear, and cout << "str1 ==>0: " << str1 << endl; Empty str3 = str1; str1.erase(); cout << "str1 ==>1: " << str1 << endl; str1 ==>0: This is one string if (str1.empty()) str1 ==>1: cout <<"ntstr1 is empty nn"; str1 = str3; str1 is empty str1.erase(8, 4); cout << "str1 ==>2: " << str1 << endl; str1 = str3; str1 ==>2: This is string str1.clear(); str1 ==>3: cout << "str1 ==>3: " << str1 << endl; if (str1.empty()) str1 is empty cout <<"ntstr1 is empty n"; return 0;} 37 TCP1231 Computer Programming I
  38. 38. Swap the two strings swap(str1, str2); interchange the string str1 with str2 Example:  Before swapping str1 = “Multimedia” str2 = “University”  After swapping str1 = “University” str2 = “Multimedia” 38 TCP1231 Computer Programming I
  39. 39. #include <iostream>#include <string> Swap#include <conio.c>using namespace std;int main (){ string str1 = "read then eat"; string str2 = "eat then sleep"; cout << "str1 ==>0: " << str1 << endl; cout << "str2 ==>0: " << str2 << endl; cout << endl; swap(str1, str2); str1 ==>0: read then eat cout << "str1 ==>1: " << str1 << endl; str2 ==>0: eat then sleep cout << "str2 ==>1: " << str2 << endl; str1 ==>1: eat then sleep return 0;} str2 ==>1: read then eat 39 TCP1231 Computer Programming I
  40. 40. string Objects to C-strings Recall the automatic conversion from C-string to string: char a_c_string[] = "C-string"; string_variable = a_c_string; strings are not converted to C-strings Both of these statements are illegal:  a_c_string = string_variable;  strcpy(a_c_string, string_variable); 40 TCP1231 Computer Programming I
  41. 41. Converting strings to C-strings The string class member function c_str returns the C-string version of a string object  Example: strcpy(a_c_string, string_variable.c_str( ) ); This line is still illegal a_c_string = string_variable.c_str( );  Recall that operator = does not work with C- strings 41 TCP1231 Computer Programming I
  42. 42. Conversion between C-string and C++ string valid, assign a C-string to char cstr[20] = "hello"; C++ string string cppstr = "world"; cppstr = cstr; Invalid, can not assign nor cstr = cppstr; copy a C++-string to C strcpy(cstr, cppstr); string. strcpy(cstr, cppstr.c_str() ); valid, convert a C++-string to C string (using the c_str() cstr = cppstr.c_str() ; function) before it is being copy into the C-stringInvalid, even though the C++-string has been convert to C-string, we cannot assign the new C-string into another C-string, we need to use thestrcpy() for that. 42 TCP1231 Computer Programming I
  43. 43. The End 43TCP1231 Computer Programming I

×