1 159.234 LECTURE 17 C++ Strings 18. 2Strings Creating String Objects 18 C-string C++ - string \0 Array of chars that is null terminated (‘\0’). Object.

Slides:



Advertisements
Similar presentations
EC-111 Algorithms & Computing Lecture #8 Instructor: Jahan Zeb Department of Computer Engineering (DCE) College of E&ME NUST.
Advertisements

EC-111 Algorithms & Computing Lecture #11 Instructor: Jahan Zeb Department of Computer Engineering (DCE) College of E&ME NUST.
M ANIPULATING S TRINGS Resources [1] Object Oriented Programming with C++ (3 rd Edition) E Balagurusamy [2] Teach Yourself C++ (3 rd Edition) H Schildt.
L which include file needs to be used for string manipulation? what using statement needs to be included fro string manipulation? l how is a string assigned.
 2003 Prentice Hall, Inc. All rights reserved Fundamentals of Characters and Strings Character constant –Integer value represented as character.
Strings.
Copyright  Hannu Laine C++-programming Part 5 Strings.
What is a pointer? First of all, it is a variable, just like other variables you studied So it has type, storage etc. Difference: it can only store the.
Classes and Data Abstraction Lecture 9. Objects Models of things in the real world Defined in classes  Class name is the object name Example: Library.
AU/MITM/1.6 By Mohammed A. Saleh 1. Introducing the string Class  Instead of using a character array to hold a string, you can use a type string variable.
Current Assignments Homework 5 will be available tomorrow and is due on Sunday. Arrays and Pointers Project 2 due tonight by midnight. Exam 2 on Monday.
Strings in C++ 04/29/11. Quiz Arrays  Section 7.1 & 7.2  Array basics  Partially filled arrays  Passing individual elements Mon. 05/02/11.
Today’s Class Class string –The basics –Assignment –Concatenation –Compare & swap –Find –Conversion to C-style char * strings –Iterators.
計算機概論實習 How to Use string Template class basic_string String manipulation (copying, searching, etc.) typedef basic_string string; Also typedef.
 2006 Pearson Education, Inc. All rights reserved Class string and String Stream Processing.
1 Lecture 20:Arrays and Strings Introduction to Computer Science Spring 2006.
Chapter 9: Arrays and Strings
CS Nov 2006 C-strings.
UNFORMATTED INPUT OUTPUT. Topics to be discussed……………….. overloaded operators >> and and
1 Chapter 10 Characters, Strings, and the string class.
In Addition... To the string class from the standard library accessed by #include C++ also has another library of string functions for C strings that can.
CSIS 123A Lecture 6 Strings & Dynamic Memory. Introduction To The string Class Must include –Part of the std library You can declare an instance like.
Data Type string #include // C++ String class string str1, str2; // Default constructor cin >> str1 >> str2; cout
Working with Strings Lecture 2 Hartmut Kaiser
EGR 2261 Unit 9 Strings and C-Strings  Read Malik, pages in Chapter 7, and pages in Chapter 8.  Homework #9 and Lab #9 due next week.
Chapter 10. Characters, Strings and the string class Csc 125 Introduction to C++ Fall 2005.
C++ PROGRAMMING: PROGRAM DESIGN INCLUDING DATA STRUCTURES, FIFTH EDITION Chapter 10: Strings and string type.
CS Midterm Study Guide Fall General topics Definitions and rules Technical names of things Syntax of C++ constructs Meaning of C++ constructs.
Copyright © 2012 Pearson Education, Inc. Chapter 10: Characters, C- Strings, and More About the string Class.
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.
Copyright © 2012 Pearson Education, Inc. Chapter 10: Characters, C- Strings, and More About the string Class.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 10: Characters, Strings, and the string class.
 2003 Prentice Hall, Inc. All rights reserved.m ECE 2552 Dr. Këpuska based on Dr. S. Kozaitis Summer Chapter 15 - Class string and String Stream.
 2000 Prentice Hall, Inc. All rights reserved. Chapter 21 - C++ Stream Input/Output Basics Outline 21.1Introduction 21.2Streams Iostream Library.
Characters, Strings, And The string Class Chapter 10.
Copyright © 2015, 2012, 2009 Pearson Education, Inc., Publishing as Addison-Wesley All rights reserved. Chapter 10: Characters, C- Strings, and More About.
1 Character Strings (Cstrings) Reference: CS215 textbook pages
C++ String Class nalhareqi©2012. string u The string is any sequence of characters u To use strings, you need to include the header u The string is one.
SMIE-121 Software Design II School of Mobile Information Engineering, Sun Yat-sen University Lecture.
Copyright 2003 Scott/Jones Publishing Standard Version of Starting Out with C++, 4th Edition Chapter 10 Characters, Strings, and the string class.
CS 1430: Programming in C++ 1. Data Type string #include // C++ String class string str1, str2; // Default constructor cin >> str1 >> str2; cout
Chapter 15 Strings as Character Arrays
C++ STRINGS ● string is part of the Standard C++ Library ● new stuff: ● cin : standard input stream (normally the keyboard) of type istream. ● >> operator.
Chapter 11 Standard C++ Strings and File I/O Dept of Computer Engineering Khon Kaen University.
C++ How to Program, 9/e © by Pearson Education, Inc. All Rights Reserved.
More about strings in C++. String member functions The next three slides present information about functions that are members of the C++ string class.
Chapter Characters, Strings, and the string class 10.
Streams One of the themes of this course is that everything can be reduced to simple (and similiar) concepts. Streams are one example. Keyboard and Screen.
Program Input and the Software Design Process ROBERT REAVES.
نظام المحاضرات الالكترونينظام المحاضرات الالكتروني I/O and File management Concept of streams. cin and cout objects. C++stream classes. Unformatted I/O.
EC-111 Algorithms & Computing Lecture #10 Instructor: Jahan Zeb Department of Computer Engineering (DCE) College of E&ME NUST.
C-Strings We have already seen that a C-string is a null-terminated array of characters.
Class string and String Stream Processing: A Deeper Look
Working with Strings Lecture 2 Hartmut Kaiser
Characters, C-Strings, and More About the string Class
Standard Version of Starting Out with C++, 4th Edition
Data Streams.
Object Oriented Programming COP3330 / CGS5409
C++ STRINGS string is part of the Standard C++ Library
Learning Objectives String Class.
Basic Input and Output C++ programs can read and write information using streams A simple input stream accepts typed data from a keyboard A simple output.
Working with Strings Lecture 2 Hartmut Kaiser
10.1 Character Testing.
String class and its objects
Strings and Streams Professor Hugh C. Lauer CS-2303, System Programming Concepts (Slides include materials from The C Programming Language, 2nd edition,
Class string and String Stream Processing
Standard Version of Starting Out with C++, 4th Edition
Strings Skill Area 313 Part C
Chapter 12: More on C-Strings and the string Class
Presentation transcript:

LECTURE 17 C++ Strings 18

2Strings Creating String Objects 18 C-string C++ - string \0 Array of chars that is null terminated (‘\0’). Object whose string type is defined in the file has a large repertoire of functions (e.g. length, replace, etc.) char cs[ ] = “Napoleon”; // C-string string s = “Napoleon”; // C++ - string cout << s << “ has “ << s.length() << “ characters.\n”; s.replace(5, 2,”ia”); //changes s to “Napolian

3 –Formatted Input: Stream extraction operator cin >> stringObject; >>the extraction operator >> formats the data that it receives through its input stream; it skips over whitespace –Unformatted Input: getline function for a string getline( cin, s) –does not skip over whitespace –delimited by newline –reads an entire line of characters into s string s = “ABCDEFG”; getline(cin, s); //reads entire line of characters into s char c = s[2]; //assigns ‘C’ to c S[4] = ‘*’; //changes s to “ABCD*FG” C ++ Strings

4 –Not necessarily null terminated –string is not a pointer, but a class –Many member functions take start position and length If length argument too large, max chosen C ++ Strings

5 Creating String Objects 18 #include //string initialization string s; //s contains 0 characters string s1( "Hello" ); //s1 contains 5 characters string s2 = “Hello”; //s2 contains 5 characters //implicitly calls the constructor string s3( 8, 'x' ); //s3 contains 8 'x' characters string s4 = s3; //s4 contains 8 'x' characters string s5(s2, 3, 2); //s5 copies a substring of s2; it contains ”lo” string type in the header file. string_characteristics.cpp

6 C ++ Strings String Objects 18 s string s = “ABCDEFG”; s const char* cs = s.c_str(); Converts s into the C-string cs. C++ strings can be converted to C-strings: The c_str() function has a return type const char*

7 C ++ Strings String Objects 18 cout << s.length() << endl; Prints 4 for the string s == “Leon” length() The C++ string class also defines a length() function for extracting how many characters are stored in a string. subscript operator You can also use the subscript operator [ ] to access individual characters: e.g. s[0] = ‘N’ ; //where index: 0 to length-1

8 C ++ Strings String Objects 18 If(s2 < s5) cout << “s2 lexicographically precedes s5 \n”; while(s4==s3) //… 'B' is lexicographically greater than 'A' C++ strings can be compared using relational operators just like fundamental types: compare.cpp Sample order: ‘A’,”Apple”, “Banana”, “Zest”, ‘a’, “apricot”, “leon”

9 C ++ Strings String Objects 18 string s = “ABCD*FG”; string s2 = “Robot”; string s5 = “Soccer”; string s6 = s + “HIJK”; //changes s6 to “ABCD*FGHIJK s2 += s5; //changes s2 to “RobotSoccer” You can also concatenate C++ strings using the + and += operators:

10 C ++ Strings String Objects 18 s6 = “ABCD*FGHIJK”; s4 = s6.substr(5, 3); //changes s4 to “FGH” Substring function: substr() s4 gets a substring of s6, starting at index 5 and taking 3 characters

11 C ++ Strings String Objects 18 s6 = “ABCD*FGHIJK”; s6.erase(4, 2); //changes s6 to “ABCDGHIJK”; s6.replace(5, 2, “xyz”); //changes s6 to “ABCDGxyzJK”; erase() and replace() functions: replace 2 characters from s6, starting at index 5, with “xyz”

12 C ++ Strings String Objects 18 string s7 = “Mississippi River basin”; //23 characters cout << s7.find(“si”) << endl; //prints 3 cout << s7.find(“so”) << endl; //prints 23, the length of the string find() function returns the index of the first occurrence of a given substring: If the find() function fails, it returns the length of the string it was searching. i.e. find() returns 4,294,967,295

13 Assignment AssignmentAssignment –s2 = s1; Makes a separate copy –s2.assign(s1); Same as s2 = s1; –myString.assign(s, start, N); NsstartCopies N characters from s, beginning at index start –Individual character assignment s2[0] = s3[2];

14 Range-checking –s3.at( index ); indexReturns character at index out_of_rangeCan throw an out_of_range exception –[] has no range checking #include... s string s = "leon"; try{ s char letter = s.at( 50 ) ; cout <<"letter is = " << letter << endl; } catch(exception& e){ what() cout << "out_of_range exception: " << e.what() << endl; } string_characteristics.cpp

15 Concatenation ConcatenationConcatenation –s3.append( "pet" ); –s3 += "pet"; Both add "pet" to end of s3 –s3.append( s1, start, N ); Ns1startAppends N characters from s1, beginning at index start

16 Comparing strings Overloaded operators –==, !=,, = –returns bool s1.compare(s2) –returns positive if s1 is lexicographically greater compares letter by letter 'B' lexicographically greater than 'A‘ ‘a’ lexicographically greater than ‘A‘ ‘a’ lexicographically greater than ‘Z‘ –returns negative if less; zero if equal Sample order: ‘A’,”Apple”, “Banana”, “Zest”, ‘a’, “apricot”, “leon” –s1.compare(start, length, s2, start, length) Compare portions of s1 and s2 –s1.compare(start, length, s2) Compare portion of s1 with all of s2 Compare.cpp

17 Substrings Function substr gets a substring –s1.substr( start, N ); –gets N characters, beginning with index start –returns substring

18 Swapping strings s1.swap(s2); –Switch contents of two strings

19 string Characteristics Member functions –s1.size() and s1.length() Number of characters in a string –s1.capacity() Number of elements that can be stored without reallocation –s1.max_size() Maximum possible string size –s1.empty() Returns true if empty –s1.resize(newlength) Resizes string to newlength string_characteristics.cpp

20 Finding Strings and Characters in a string Find functionsFind functions –If found, index returned –If not found, string::npos returned Public static constant in class string –s1.find( s2 ) –s1.rfind( s2 ) Searches right-to-left –s1.find_first_of( s2 ) Returns first occurrence of any character in s2 Example: s1.find_first_of( "abcd" ) –Returns index of first 'a', 'b', 'c' or 'd' others.cpp

21 Finding Strings and Characters in a string Find functionsFind functions –s1.find_last_of( s2 ) Finds last occurrence of any character in s2 –s1.find_first_not_of( s2 ) Finds first character NOT in s2 –s1.find_last_not_of( s2 ) Finds last character NOT in s2 others.cpp

22 Replacing Characters in a string s1.erase( start ) –Erase from index start to end of string, including start Replace –s1.replace( begin, N, s2) begin : index in s1 to start replacing N : number of characters to replace s2 : replacement string –s1.replace( begin, N, s2, index, num ) index : element in s2 where replacement comes from num : number of elements to use when replacing –Replace can overwrite characters others.cpp

23 Example s1.replace( begin, N, s2, index, num ) begin : index in s1 to start replacing N : number of characters to replace s2 : replacement string index : element in s2 where replacement comes from num : number of elements to use when replacing. string str = "this is an example string."; string str3="sample phrase"; str.replace(19,6, str3, 7, 6);// "this is an example phrase." str.replace(19,6, str3, 7, 6); // "this is an example phrase."

24 Inserting Characters into a string s1.insert( index, s2 ) –Inserts s2 before position index s1.insert( index, s2, index2, N ); –Inserts substring of s2 before position index –Substring is N characters, starting at index2 others.cpp

25 Conversion to C-Style char* Conversion functions –String s are not necessarily null-terminated –s1.copy( ptr, N, index ) Copies N characters into the array ptr Starts at location index Need to null terminate char str[8]; string s2 = "cathode"; s2.copy(str, 5, 2); //copy 5 characters into str //starting at index 2 //strcat(str,"\0"); //does not work //this is required str[5] = '\0'; //this is required cout << "str = " << str << endl; cout << "s2 = " << s2 << endl; Output: str = thode s2 = cathode

26 Conversion to C-Style char * Strings Conversion functions –s1.c_str() Returns const char * Null terminated e.g. Useful for filenames: ifstream in( s1.c_str() ); –s1.data() Returns const char * NOT null-terminated

27 Warning! No conversionNo conversion from int or char –The following definitions could return errors, or warnings only, but then would cause the program to crash afterwards string error1 = 'c'; string error2( 'u' ); string error3 = 22; string error4( 8 ); –However, it can be assigned one char after its declaration: s = 'n';

28 String Stream Processing I/O of strings to and from memory –Called in-memory I/O or string stream processing –Classes istringstream // input from string ostringstream // output to a string stringstream( string ) // most useful Requires and headers –Use string formatting to save data to memory allows a string to be used as an internal file useful for buffering input and output

29 conduit Serves as a conduit to an anonymous string which can be read oss.str() oss with the built-in oss.str() function that is bound to the oss object ostringstream ostringstream oss; int n = 44; float x = 3.14; oss << "Hello!\t" << n << '\t' << x; oss.str(); string s = oss.str(); cout << endl << s << endl; Output String Stream Remember sprintf()?, how does it compare to this one? output_string_stream.cpp

30 iss as if All extractions from iss will come from the contents of buffer, as if it were an external file it were an external file. const string buffer = oss.str(); istringstream iss istringstream iss(buffer); string word; int m; float y; iss iss >> word >> m >> y; iss s = iss.str(); cout << endl << s << endl; cout << "word = " << word << endl; cout << "m = " << m << endl; cout << "y = " << y << endl; Input String Stream issbuffer iss is defined and bound to buffer buffer Contents of buffer can be accessed as elements of a string, or by iss formatted input through the iss object. Remember sscanf()?, how does it compare to this one? input_string_stream.cpp

31 #include using namespace std; int main(){ string s1("mydata.txt"); ifstream in( s1.c_str() ); char buffer[1024]; while( in.getline( buffer, 1024 ) ){ string stemp( buffer ); cout << "Line is:" << stemp << endl; if( stemp[0] != '#' ){ stringstream stris( stemp ); double d1, d2; stris >> d1 >> d2; cout << d1 << "," << d2 << endl; } cout << endl; } in.close(); return 0; } Using string example Input file: # Example Output: Line is: ,2 Line is: ,2.4 Line is: ,2.8 Line is:# Line is: ,8.99 (or could use strtok, C String tokenizers)

32 #include using namespace std; int main(){ string s1("mydata.txt"); ifstream in( s1.c_str() ); char buffer[1024]; while( in.getline( buffer, 1024 ) ){ string stemp( buffer ); cout << "Line is:" << stemp << endl; if( stemp[0] != '#' ){ stringstream stris( stemp ); double d1, d2; stris >> d1 >> d2; cout << d1 << "," << d2 << endl; } cout << endl; } in.close(); return 0; } int main(){ string s1("mydata.txt"); ifstream in( s1.c_str() ); string buffer; while(getline( in, buffer ) ){ cout << "Line is:" << buffer << endl; if( buffer[0] != '#' ){ istringstream stris( buffer ); double d1, d2; stris >> d1 >> d2; cout << "data: " << d1 << "," << d2 << endl; } cout << endl; } in.close(); return 0; } File_stringstream2.cpp Alternatively: (no C-style char*)

33 Summary C++ strings are safer and easier to use than C string. Next Templates

34 More of this Feature C-Style Character Arrays String Class String Operations String Class Methods Using String Methods C-Style Character ArraysString ClassString OperationsString Class MethodsUsing String Methods MethodUse append(char *pt); append(char *pt, size_t count); append(string &str, size_t offset,size_t count); append(string &str); append(size_t count, char ch); append(InputIterator Start, InputIterator End); Appends characters to a string from C-style strings, char's or other string objects. at(size_t offset); Returns a reference to the character at the specified position. Differs from the subscript operator, [], in that bounds are checked. begin();Returns an iterator to the start of the string. *c_str();Returns a pointer to C-style string version of the contents of the string. clear();Erases the entire string. copy(char *cstring, size_t count, size_t offset); Copies "count" characters into a C-style string starting at offset. empty();Test whether a string is empty. end();Returns an iterator to one past the end of the string. erase(iterator first, iterator last); erase(iterator it); erase(size_t pos, size_t count); Erases characters from the specified positions.

35 MethodUse find(char ch,size_t offset = 0); find(char *pt,size_t offset = 0); find(string &str,size_t offset = 0); Returns the index of the first character of the substring when found. Otherwise, the special value "npos" is returned. find_first_not_of(); Same sets of arguments as find. Finds the index of the first character that is not in the search string. find_first_of(); Same sets of arguments as find. Finds the index of the first character that is in the search string. find_last_not_of(); Same sets of arguments as find. Finds the index of the last character that is not in the search string. find_last_of(); Same sets of arguments as find. Finds the index of the last character that is in the search string. insert(size_t pos, char *ptr); insert(size_t pos, string &str); insert(size_t pos, size_t count, char ch); insert(iterator it, InputIterator start, InputIterator end); Inserts characters at the specified position. push_back(char ch);Inserts a character at the end of the string. replace(size_t pos, size_t count, char *pt); replace(size_t pos, size_t count, string &str); replace(iterator first, iterator last, char *pt); replace(iterator first, iterator last, string &str); Replaces elements in a string with the specified characters. The range can be specified by a start position and a number of elements to replace, or by using iterators. size();Returns the number of elements in a string. swap(string &str);Swaps two strings.