Lec 25 - arrays-strings
-
Upload
princess-sam -
Category
Documents
-
view
522 -
download
0
description
Transcript of Lec 25 - arrays-strings
![Page 1: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/1.jpg)
1
Arrays and Strings
Lecture: 25
19.09.2012
![Page 2: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/2.jpg)
2
Design Problem Consider a program to calculate class
average
Why??
?
![Page 3: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/3.jpg)
3
Add to Design Problem Now your client says, I need to ALSO
calculate and display “deviations” from the average
Describe why this will or will NOT work
![Page 4: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/4.jpg)
4
Enter in the scores again Use 100 separate variables
» and cout and cin commands Read (then re-read) from a file The real answer …
Possible Solutions
Use arrays!!
![Page 5: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/5.jpg)
5Simple vs Structured Data Types
Simple data type => data element contains a single value
Structured data type => a data element contains a collection of data values
x : 15 avg : 84.35 ch : ‘A’
scores : 85 79 92 57 68 80
name : ‘C’ ‘L’ ‘Y’ ‘D’ ‘E’
![Page 6: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/6.jpg)
6
Arrays Arrays are Structured Data Types They have a means of accessing
individual components Values can be retrieved from and stored
in the structure
scores : 85 79 92 57 68 800 1 2 3 4 5
cout << scores[2];scores[0] = 100;
![Page 7: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/7.jpg)
7
One Dimensional Array Structured collection of components
» All of the same type Structure given a single name Individual elements accessed by index
indicating relative position in collection Type of elements stored in an array can be
“just about” anything Index of an array must be an integer
![Page 8: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/8.jpg)
8Use of Array for Our Problem
Store elements in array as read in Go back and access for deviations
Note declaration
![Page 9: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/9.jpg)
9
Declaring Arrays Syntax:
Data_type Array_name [constant]; Note declaration from our example
Tells how many elements set aside
![Page 10: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/10.jpg)
10
Declaring Arrays Example specifies an array…
» each element is an integer» there is space for 100 elements» the are numbered 0 through 99
scores : 85 79 92 57 68 80 . . . 0 1 2 3 4 5 98 99
![Page 11: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/11.jpg)
11Accessing Individual Components
Use the name of the array Followed by an integer expression
inside the square brackets [ ]
scores : 85 79 92 57 68 80 . . . 0 1 2 3 4 5 98 99
max = scores[0];for (x = 0; x < 100; x++) if (scores[x] > max) max = scores[x];
Index can be:- constant- variable- expressionMUST be an integer
![Page 12: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/12.jpg)
12
Out of Bounds Index What happens if …
C++ does NOT check for index out of range Possible to walk off into “far reaches” of
memory -- clobbers ...» other variable locations» .exe code » the operating system (??)
float f_list [50];
f_list [100] = 123.456;
![Page 13: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/13.jpg)
13Initializing Arrays in Declarations
Possible to declare the size & initialize
Possible to omit size at declaration» Compiler figures out size of array
int results [5] = {14, 6, 23, 8, 12 }
float prices [ ] = { 2.41, 85.06, 19.95, 3.91 }
![Page 14: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/14.jpg)
14
Arrays as Parameters This is one task that CAN be done to the
WHOLE array C++ always passes arrays by reference
![Page 15: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/15.jpg)
15
Arrays as Parameters The name of the array is a pointer
constant The address of the array is passed to the
function Size of the
array alsopassed tocontrol loop
![Page 16: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/16.jpg)
16
Arrays as Parameters Note the empty brackets in parameter
list » A number can be placed here but it
will beignored
![Page 17: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/17.jpg)
17
Multidimensional Arrays A collection of a fixed number of components
arranged in two dimensions» All components are of the same type
The syntax for declaring a two-dimensional array is:dataType arrayName[intexp1][intexp2];
where intexp1 and intexp2 are expressions yielding positive integer values.
![Page 18: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/18.jpg)
18
Multidimensional Arrays The two expressions intexp1 and intexp2 specify
the number of rows and the number of columns, respectively, in the array
Two-dimensional arrays are sometimes called matrices or tables
![Page 19: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/19.jpg)
19
Multidimensional Arrays
double sales[10][5];
![Page 20: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/20.jpg)
20
Accessing Array Elements The syntax to access a component of a two-
dimensional array is:arrayName[indexexp1][indexexp2]
where indexexp1 and indexexp2 are expressions yielding nonnegative integer values
indexexp1 specifies the row position and indexexp2 specifies the column position
![Page 21: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/21.jpg)
21
Accessing Array Elementssales[2][3] = 35.60;
35.60
![Page 22: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/22.jpg)
22
2-DIM. Array Initialization Like one-dimensional arrays
» Two-dimensional arrays can be initialized when they are declared
To initialize a two-dimensional array when it is declared1. Elements of each row are enclosed within braces
and separated by commas2. All rows are enclosed within braces3. For number arrays, if all components of a row are
not specified, the unspecified components are initialized to zero
![Page 23: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/23.jpg)
23
2-DIM. Array Initialization Example: int anArray[3][5] =
{{ 1, 2, 3, 4, 5, }, // row 0{ 6, 7, 8, 9, 10, }, // row 1{ 11, 12, 13, 14, 15 } // row 2
};
![Page 24: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/24.jpg)
24
2-DIM. Array Initialization Accessing all of the elements of a two-dimensional
array requires two loops: one for the row, and one for the column.
Since two-dimensional arrays are typically accessed row by row, generally the row index is used as the outer loop.
for (int nRow = 0; nRow < nNumRows; nRow++) for (int nCol = 0; nCol < nNumCols; nCol++) cout << anArray[nRow][nCol];
![Page 25: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/25.jpg)
25
Multidimensional Arrays A collection of a fixed number of elements (called
components) arranged in n dimensions (n >= 1) Also called an n-dimensional array General syntax of declaring an n-dimensional array is:
dataType arrayName[intExp1][intExp2]...[intExpn];
where intExp1, intExp2, … are constant expressions yielding positive integer values
Example: 3-Dimensional array:int anArray[5][4][3];
![Page 26: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/26.jpg)
26C-Strings or Character Arrays
We have learned that the elements of an array can be just about anything
Consider an array whose elements are all characters» Called a C-String» Has a collection of special routines
![Page 27: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/27.jpg)
27C-Strings or Character Arrays
Character array: An array whose components are of type char
String: A sequence of zero or more characters enclosed in double quote marks
C-stings are null terminated (‘\0’)
The last character in a string is the null character
![Page 28: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/28.jpg)
28C-Strings or Character Arrays
char str[80] = “Amanuensis”
![Page 29: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/29.jpg)
29C-Strings or Character Arrays
There is a difference between 'A' and "A"
» 'A' is the character A
» "A" is the string A
Because strings are null terminated, "A" represents two characters, 'A' and '\0‘
Similarly, "Hello" contains six characters, 'H', 'e', 'l', 'l', 'o', and '\0'
![Page 30: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/30.jpg)
30C-Strings or Character Arrays
Consider the statementchar name[16];
Because C-strings are null terminated and name has sixteen components» the largest string that can be stored in name
is 15 If you store a string of length, say 10 in name
» the first 11 components of name are used and the last 5 are left unused
![Page 31: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/31.jpg)
31
Declaration of C-Strings Similar to declaration of any arraychar name[30];
// no initializationchar title [20] = "Le Grande Fromage"; // initialized at declaration
// with a stringchar chList [10] = {'a', 'b', 'c', 'd'}; // initialized with list of char
// values
![Page 32: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/32.jpg)
32
Initializing Strings When a character array is declared, it is legal
to use the assignment operator to initialize
Note : use of the = operator only legal for char array initialization
But : aggregate array assignment is NOT
greeting = “don’t do it;
![Page 33: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/33.jpg)
C-Strings: Example-1#include<iostream>#include<conio.h>using namespace std;
int main(){ const int MAX = 80; //maximum characters in a stringchar str[MAX]; //string variable strcout<< “Enter a string \n”;cin>>str; //put string in str
cout<< “You entered: ” << str << endl; //display string from strgetch();return 0; }
33
![Page 34: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/34.jpg)
Reading Embedded Blanks#include<iostream>#include<conio.h>using namespace std;
int main(){ const int MAX = 80;char str[MAX];cout<< “Enter a string \n”;cin.get(str,MAX); //member function get() of the stream class of
// which cin is an objectcout<< “You entered: ” << str << endl;getch();return 0; }
34
![Page 35: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/35.jpg)
Reading Multiple Lines#include<iostream>#include<conio.h>using namespace std;
const int MAX = 2000;char str[MAX];
int main(){ cout<< “Enter a string \n”;cin.get(str, MAX, ‘$’); //terminate with $cout<< “You entered: ” << str << endl;getch();return 0; }
35
![Page 36: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/36.jpg)
Copying a string: Hard-way#include<iostream>#include<cstring> // for copying a string#include<conio.h>using namespace std;
int main(){ char str1[] = “C++ is the best programming”
“language that I have ever used.”;const int MAX = 80;char str2[MAX];for(int j=0; j < strlen(str1); j++)
str2[j] = str1[j];cout<< str2 << endl;getch();return 0; }
36
![Page 37: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/37.jpg)
Copying a string: Easy-way#include<iostream>#include<cstring> // for copying a string#include<conio.h>using namespace std;
int main(){ char str1[] = “C++ is the best programming”
“language that I have ever used.”;const int MAX = 80;char str2[MAX];strcpy(str2, str1);cout<< str2 << endl;getch();return 0; }
37
![Page 38: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/38.jpg)
Standard C++ string Class38
#include<iostream>#include<string> //string class#include<conio.h>using namespace std;
int main(){ string s1(“Man”); string s2 = “Beast”; string s3;s3 = s1; //assigncout << “s3 = “ << s3 << endl;
s3 = “Neither “ + s1 + “ nor ”; //concatenates3 += s2; //concatenatecout << “s3 = ” << s3 << endl;s1.swap(s2); //swap s1 and s2cout << s1 << ” nor “ << s2 << endl;getch(); return 0; }
![Page 39: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/39.jpg)
39Contrast/Compare Strings and C-Strings
Assignment is OKstring s;s = "hi mom";
Comparison OKif (s < "geek") …
I/O allowedcin >> s;cin.getline(s,'\n');cout << s;
Assignment is illegalchar cs[30];cs = "don't do it";
Comparisons not allowed I/O allowed much the
same way
![Page 40: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/40.jpg)
40
Working with Strings Functions provided in #include <cstring>
Used instead of assignment
Used for comparisons
![Page 41: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/41.jpg)
Working with Strings C-strings are compared character by character
using the collating sequence of the system If we are using the ASCII character set
1. The string "Air" is smaller than the string "Boat"
2. The string "Air" is smaller than the string "An"
3. The string "Bill" is smaller than the string "Billy"
4. The string "Hello" is smaller than "hello"
41
![Page 42: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/42.jpg)
Working with Strings42
![Page 43: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/43.jpg)
Passing Arrays to Functions
Arrays can be used as arguments to functions.
43
![Page 44: Lec 25 - arrays-strings](https://reader033.fdocuments.net/reader033/viewer/2022061122/546fb621b4af9ffa638b45bd/html5/thumbnails/44.jpg)
Passing Arguments to Arrays
#include<iostream>#include<conio.h>using namespace std;
int sum(int list[], int listSize){int index, sum = 0;for(index=0; index<listSize; index++) sum = sum + list[index];return sum; }
int main(){ int myArray[] = {2, 3, 5}; cout<< "The is: " << sum(myArray, 3); getch(); return 0; }
44