C/C++ Basics (VI) Strings and Vectors Berlin Chen 2003 Textbook: 1. Walter Savitch, “Absolute C++,” Addison Wesley, 2002 開發代理 2. Walter Savitch, “Problem.

Slides:



Advertisements
Similar presentations
Chapter 9 Strings. Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 9-2 Learning Objectives An Array Type for Strings C-Strings Character.
Advertisements

Copyright © 2002 Pearson Education, Inc. Slide 1.
Chapter 7 Constructors and Other Tools. Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-2 Learning Objectives Constructors Definitions.
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.
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.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Slide 8- 1 Overview 8.1 An Array Type for Strings 8.2 The Standard string.
Chapter 10.
CS31: Introduction to Computer Science I Discussion 1A 5/7/2010 Sungwon Yang
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 8 Strings and Vectors.
Chapter 9: Arrays and Strings
How to Program in C++ CHAPTER 3: INPUT & OUTPUT INSTRUCTOR: MOHAMMAD MOJADDAM.
Chapter 8 Arrays and Strings
Chapter 7. 2 Objectives You should be able to describe: The string Class Character Manipulation Methods Exception Handling Input Data Validation Namespaces.
Chapter 3: Input/Output
Computer Science 1620 Strings. Programs are often called upon to store and manipulate text word processors chat databases webpages etc.
C-strings Array with base type char One character per indexed variable
ACS 168 Structured Programming Using the Computer Spring 2002 Joaquin Vila Prepared by Shirley White.
Chapter 8 Strings and Vectors (8.1 and 8.2). An Array of characters Defined as: char firstName[20]; char firstName[] = {‘T’, ‘i’, ‘m’}; // an array of.
1 Data Structures A Data Structure is an arrangement of data in memory. A Data Structure is an arrangement of data in memory.  The purpose is to map real.
Dr. Yang, QingXiong (with slides borrowed from Dr. Yuen, Joe) LT8: Characters and Strings CS2311 Computer Programming.
Array with base type char One character per indexed variable One extra character: '\0' Called ‘null character’ Delimiter of the string To declare a string,
Chapter 1 Working with strings. Objectives Understand simple programs using character strings and the string library. Get acquainted with declarations,
Searching and Sorting, Template Functions, and Vectors ITK 169 Fall 2003.
Character Arrays Based on the original work by Dr. Roger deBry Version 1.0.
CS Midterm Study Guide Fall General topics Definitions and rules Technical names of things Syntax of C++ constructs Meaning of C++ constructs.
9-1 Learning Objectives  An Array Type for Strings  C-Strings.
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 © 2008 Pearson Addison-Wesley. All rights reserved. Chapter 8 Strings and Vectors.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 8 Strings and Vectors.
String Class. C-style and C++ string Classes C-style strings, called C-strings, consist of characters stored in an array ( we’ll look at them later) C++
12/15/2015Engineering Problem Solving with C++, Second Edition, J. Ingber 1 Engineering Problem Solving with C++, Etter Chapter 6 One-Dimensional Arrays.
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.
CSC 270 – Survey of Programming Languages
C++ for Engineers and Scientists Second Edition Chapter 7 Completing the Basics.
© Janice Regan, CMPT 128, February CMPT 128: Introduction to Computing Science for Engineering Students C-strings and strings.
Chapter 9 Strings. Learning Objectives An Array Type for Strings – C-Strings Character Manipulation Tools – Character I/O – get, put member functions.
C++ STRINGS ● string is part of the Standard C++ Library ● new stuff: ● cin : standard input stream (normally the keyboard) of type istream. ● >> operator.
An Array Type For Strings. Two ways to represent strings – i.e. “Hello” cstring An array with base type char Older way of processing strings Null character.
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.
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 8 Strings and Vectors. Slide 8- 2 Overview 8.1 An Array Type for Strings 8.2 The Standard string Class 8.3 Vectors.
A FIRST BOOK OF C++ CHAPTER 14 THE STRING CLASS AND EXCEPTION HANDLING.
Chapter 7 Constructors and Other Tools Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
Glenn Stevenson CSIS 113A MSJC CSIS 123A Lecture 3 Vectors.
DCT1063 Programming 2 CHAPTER 3 STRINGS Mohd Nazri Bin Ibrahim Faculty of Computer, Media & Technology TATi University College
Copyright © 2002 Pearson Education, Inc. Slide 1.
Strings. String Literals String literals are enclosed in double quotes: "Put a disk in drive A, then press any key to continue\n“ A string literal may.
Slide 1 Chapter 9 Strings. Slide 2 Learning Objectives  An Array Type for Strings  C-Strings  Character Manipulation Tools  Character I/O  get, put.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2002 Pearson Education, Inc. Slide 1.
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.
Chapter 8 Strings and Vectors 1
Chapter 8 Strings and Vectors
Auburn University COMP 3000 Object-Oriented Programming for Engineers and Scientists Strings (part 2) Dr. Xiao Qin Auburn.
Chapter 9 Strings Copyright © 2016 Pearson, Inc. All rights reserved.
Introduction to C++ Programming
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.
C-Strings, Strings, Vectors, STL
Strings and Streams Professor Hugh C. Lauer CS-2303, System Programming Concepts (Slides include materials from The C Programming Language, 2nd edition,
Constructors and Other Tools
String What it is Why it’s useful
C-strings In general, a string is a series of characters treated as a unit. Practically all string implementations treat a string as a variable-length.
Chapter 9 Strings Copyright © 2008 Pearson Addison-Wesley. All rights reserved.
Engineering Problem Solving with C++, Etter
Chapter 1 c++ structure C++ Input / Output
8.3 Vectors Copyright © 2008 Pearson Addison-Wesley. All rights reserved. 1.
Chapter 12: More on C-Strings and the string Class
Presentation transcript:

C/C++ Basics (VI) Strings and Vectors Berlin Chen 2003 Textbook: 1. Walter Savitch, “Absolute C++,” Addison Wesley, 2002 開發代理 2. Walter Savitch, “Problem Solving With C++,” Addison Wesley, 2003 歐亞代理

2 Learning Objectives An Array Type for Strings –C-Strings Character Manipulation Tools –Character I/O –get, put member functions –putback, peek, ignore Standard Class string –String processing 字串提供方便的方法儲存 文字資訊,如給使用者訊息 或者接收來自使用者的回應

3 Introduction Two string types: C-strings –Array with base type char –End of string marked with null, ‘\0’ –‘Older’ method inherited from C String class –Uses templates

4 C-Strings Array with base type char –One character per indexed variable –One extra character: ‘\0’ Called ‘null character’ End marker We’ve used C-strings –Literal “Hello” stored as C-string

5 C-String Variable Array of characters: char s[10]; –Declares a C-string variable to hold up to 9 characters + one null character Typically ‘partially-filled’ array –Declare large enough to hold max-size string –Indicate end with null Only difference from standard array: –Must contain null character

6 C-String Storage A standard array: char s[10]; –If s contains string “Hi Mom”, stored as: Indicate end with null A C-string variable is an array of characters, but it is used in a different way s[0]s[1]s[2]s[3]s[4]s[5]s[6]s[7]s[8]s[9] HiMom!\0??

7 C-String Initialization Can initialize c-string: char myMessage[20] = “Hi there.”; –Needn’t fill entire array –Initialization places ‘\0’ at end Can omit array-size: char shortString[] = “abc”; –Automatically makes size one more than length of quoted string –NOT same as: char shortString[] = {‘a’, ‘b’, ‘c’}; No a string! It doesn’t put the null character anyplace in the array

8 C-String Indexes A C-string IS an array Can access indexed variables of: char ourString[5] = “Hi”; –ourString[0] is ‘H’ –ourString[1] is ‘i’ –ourString[2] is ‘\0’ –ourString[3] is unknown –ourString[4] is unknown

9 C-String Index Manipulation Can manipulate indexed variables char happyString[7] = “DoBeDo”; happyString[6] = ‘Z’; –Be careful! –Here, ‘\0’ (null) was overwritten by a ‘Z’! If null overwritten, C-string no longer ‘acts’ like C-string! –Unpredictable results!

10 C-String Index Manipulation Example 1: int index = 0; while (our_string[index] != '\0') { our_string[index] = 'X'; index++; } This code depends on finding the null character! Example 2: int index = 0; while (our_string[index] != '\0' && index < SIZE) { our_string[index] = 'X'; index++; } It would be wiser to use this version in case the '\0' character had been removed

11 Library Declaring C-strings –Requires no C++ library –Built into standard C++ Manipulations –Require library –Typically included when using C-strings Normally want to do ‘fun’ things with them C-string variables and values are not like values and variables of other types –Many usual operations do not work for C- string

12 = and == with C-strings C-strings not like other variables –Cannot assign or compare: char aString[10]; aString = “Hello”;// ILLEGAL! Can ONLY use ‘=‘ at declaration of c-string! Must use library function for assignment: strcpy(aString, “Hello”); –Built-in function (in ) –Sets value of aString equal to “Hello” –NO checks for size! Up to programmer, just like other arrays! It may be: char aString[] = “Hello”;

13 Comparing C-strings Also cannot use operator == char aString[10] = “Hello”; char anotherString[10] = “Goodbye”; aString == anotherString; // NOT allowed! Must use library function again: if (strcmp(aString, anotherString)) cout << “Strings NOT same.”; // nonzero if not equal else cout << “Strings are same.”; // 0 if equal True False

14 Comparing C-strings Or the comparison can be if (strcmp(aString, anotherString)==0) cout << “Strings are same.”; // 1:true, if equal else cout << “Strings NOT same.”; //0:false, if not equal strcmp returns a negative value if the numeric code in the first parameter is less. strcmp returns a positive value if the numeric code in the second parameter is less. strcmp returns a zero value when the two strings are equal.

15 The Library Full of string manipulation functions

16 The Library

17 C-string Functions: strlen() String length Often useful to know string length: char myString[10] = “dobedo”; cout << strlen(myString); –Returns number of characters Not including null –Result here: 6 不包含字串結束符號

18 C-string Functions: strcat() strcat() ‘String concatenate’: char stringVar[20] = “The rain”; strcat(stringVar, “in Spain”); –Note result: stringVar now contains “The rainin Spain” –Be careful! –Incorporate spaces as needed!

19 C-string Arguments and Parameters Recall: C-string is array –So C-string parameter is array parameter C-strings passed to functions can be changed by receiving function! Like all arrays, typical to send size as well –Function ‘could’ also use ‘\0’ to find end Or use the function “strlen” to find its length –So size not necessary if function won’t change C-string parameter –Use ‘const’ modifier to protect C-string arguments

20 C-String Output Can output with insertion operator, << As we’ve been doing already: cout << news << “ Wow.\n”; –Where news is a C-string variable Possible because << operator is overloaded for C-strings!

21 C-String Input Can input with extraction operator, >> –Issues exist, however Whitespace is ‘delimiter’ ( 界定符號 ) –Tab, space, line breaks are ‘skipped’ –Input reading ‘stops’ at delimiter Watch size of C-string –Must be large enough to hold entered string! –C++ gives no warnings of such issues!

22 C-String Input Example char a[80], b[80]; cout > a >> b; cout << a << b << “END OF OUTPUT\n”; Dialogue offered: Enter input: Do be do to you! DobeEND OF OUTPUT –Note: Underlined portion typed at keyboard C-string a receives: “Do” C-string b receives: “be”

23 C-String Line Input Can receive entire line into c-string Use getline(), a predefined member function: char a[80]; cout << “Enter input: “; cin.getline(a, 80); cout << a << “END OF OUTPUT\n”; Dialogue: Enter input: Do be do to you! Do be do to you!END OF INPUT

24 More getline() Can explicitly tell length to receive: char shortString[5]; cout << “Enter input: “; cin.getline(shortString, 5); cout << shortString << “END OF OUTPUT\n”; –Results: Enter input: dobedowap dobeEND OF OUTPUT –Forces FOUR characters only be read Recall need for null character!

25 Character I/O Input and output data –ALL treated as character data –e.g.: number 10 outputted as ‘1’ and ‘0’ –Conversion done automatically Uses low-level utilities Can use same low-level utilities ourselves as well

26 Member Function get() Reads one char at a time Member function of cin object: char nextSymbol; cin.get(nextSymbol); –Reads next char & puts in variable nextSymbol –Argument must be char type Not ‘string’!

27 Member Function put() Outputs one character at a time Member function of cout object: Examples: cout.put(‘a’); –Outputs letter ‘a’ to screen char myString[10] = “Hello”; cout.put(myString[1]); –Outputs letter ‘e’ to screen

28 More Member Functions putback() –Once read, might need to ‘put back’ cin.putback(lastChar); peek() –Returns next char, but leaves it there peekChar = cin.peek(); ignore() –Skip input, up to designated character cin.ignore(1000, ‘\n’); –Skips at most 1000 characters until ‘\n’ 把 lastChar 放回到 input stream 所以程式下一次從 input stream 讀出 的會是 lastChar 的值

29 Character-Manipulating Functions

30 Character-Manipulating Functions

31 Character-Manipulating Functions

32 Standard Class string Defined in library: #include using namespace std; String variables and expressions –Treated much like simple types Can assign, compare, add: string s1, s2, s3; s3 = s1 + s2;//Concatenation s3 = “Hello Mom!”//Assignment –Note C-string (literal) “Hello Mom!” automatically converted to string type!

33 Program Using Class string The class string has a default constructor that initializes the string object to the empty string, and a constructor that take C-string as arguments. Use the default constructor Use the constructor

34 I/O with Class string Just like other types! string s1, s2; cin >> s1; cin >> s2; –Results: (If User types in) May the hair on your toes grow long and curly! –Extraction still ignores whitespace: s1 receives value “May” s2 receives value “the”

35 getline() with Class string For complete lines: string line; cout << “Enter a line of input: “; getline(cin, line); cout << line << “END OF OUTPUT”; –Dialogue produced: Enter a line of input: Do be do to you! Do be do to you!END OF INPUT –Similar (not the same) to C-string’s usage of getline() cin.getline(shortString, 5);

36 Other getline() Versions Can specify ‘delimiter’ character: string line; cout << “Enter input: “; getline(cin, line, ‘?’); –Receives input until ‘?’ encountered getline() actually returns reference string s1, s2; getline(cin, s1) >> s2; –Results in: (cin) >> s2;

37 Pitfall: Mixing Input Methods Be careful mixing cin >> var and getline int n; string line; cin >> n; getline(cin, line); –If input is: 42 Hello hitchhiker. –Variable n set to 42 –line set to empty string! (why?) cin >> n skipped leading whitespace, leaving ‘\n’ on stream for getline()!

38 Class string Processing Same operations available as c-strings And more! –Over 100 members of standard string class Some member functions: (e.g., a string a) a.length() –Returns length of the string variable a a.at(i) –Returns reference to char at position I –Same as a[i], but illegal index will produce an error message !

39 Class string Member Functions

40 Class string Member Functions

41 C-string and string Object Conversions Automatic type conversions –From c-string to string object: char aCString[] = “My C-string”; string stringVar; stringVar = aCstring; –Perfectly legal and appropriate! aCString = stringVar; –ILLEGAL! –Cannot auto-convert to c-string –Must use explicit conversion: strcpy(aCString, stringVar.c_str());

42 Vectors Vector Introduction –Recall: arrays are fixed size –Vectors: ‘arrays that grow and shrink’ can change size as your program runs like arrays, have a base type Formed from Standard Template Library (STL) –Using template class

43 Vector Basics Similar to array: –Has base type –Stores collection of base type values Declared differently: –Syntax: vector Indicates template class Any type can be ‘plugged in’ to Base_Type Produces ‘new’ class for vectors with that type –Example declaration: vector v; declare an empty vector with base type int identifies vector as a template class

44 Vector Use vector v; –’v is vector of type int’ –Calls class default constructor Empty vector object created Indexed like arrays for access But to add elements: –Must call member function push_back Member function size() –Returns current number of elements Class name An object

45 Vector Use Vectors elements are indexed starting with 0 –[ ]'s are used to read or change the value of an item: v[i] = 42; cout << v[i]; –[ ]'s cannot be used to initialize a vector element v[] = {42, 25, 33} ;

46 Initializing vector Elements Elements are added to a vector using the member function push_back –push_back adds an element in the next available position –Example: vector sample; sample.push_back(0.0); sample.push_back(1.1); sample.push_back(2.2);

47 The Size of a vector The member function size returns the number of elements in a vector –Example: To print each element of a vector given the previous vector initialization: for (int i= 0; i < sample.size( ); i++) cout << sample[i] << endl; –The vector class member function size returns an unsigned int Unsigned int's are nonnegative integers Some compilers will give a warning if the previous for-loop is not changed to: for (unsigned int i= 0; i < sample.size( ); i++) cout << sample[i] << endl;

48 Alternate vector Initialization A vector constructor exists that takes an integer argument and initializes that number of elements –Example: vector v(10); initializes the first 10 elements to 0 v.size( ) would return 10 [ ]'s can now be used to assign elements 0 through 9 In this case, push_back is used to assign elements greater than 9

49 Vector Initialization With Classes The vector constructor with an integer argument –Initializes elements of number types to zero –Initializes elements of class types using the default constructor for the class To use the vector class –Include the vector library #include –Vector names are placed in the standard namespace so the usual using directive is needed: using namespace std; 初始值設為零

50 Vector Example P.292

51 Vector Efficiency Member function capacity() –Returns memory currently allocated –Not same as size() –Capacity typically > size Automatically increased as needed If efficiency critical: –Can set behaviors manually v.reserve(32); //sets capacity to 32 v.reserve(v.size()+10); //sets capacity to 10 //more than size

52 Summary 1 C-string variable is ‘array of characters’ –With addition of null character, ‘\0’ C-strings act like arrays –Cannot assign, compare like simple variables –Libraries & have useful manipulating functions –cin.get() reads next single character –getline() versions allow full line reading Class string objects are better-behaved than c-strings

53 Summary 2 Vector classes –Like: ‘arrays that grow and shrink’ –like arrays, have a base type –Formed from Standard Template Library (STL) Using template class