44
1 Arrays and Strings Lecture: 25 19.09.2012

Arrays and Strings

Embed Size (px)

DESCRIPTION

Arrays and Strings. Lecture: 25. 19.09.2012. Why??. Design Problem. Consider a program to calculate class average. ?. 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. - PowerPoint PPT Presentation

Citation preview

Page 1: Arrays and Strings

1

Arrays and Strings

Lecture: 25

19.09.2012

Page 2: Arrays and Strings

2

Design Problem

Consider a program to calculate class average

Why??Why??

?

Page 3: Arrays and Strings

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 workDescribe why this will or will NOT work

Page 4: Arrays and Strings

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: Arrays and Strings

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 : 15x : 15 avg : 84.35avg : 84.35 ch : ‘A’ch : ‘A’

scores : 85 79 92 57 68 80scores : 85 79 92 57 68 80

name : ‘C’ ‘L’ ‘Y’ ‘D’ ‘E’name : ‘C’ ‘L’ ‘Y’ ‘D’ ‘E’

Page 6: Arrays and Strings

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 80scores : 85 79 92 57 68 800 1 2 3 4 5

cout << scores[2];scores[0] = 100;cout << scores[2];scores[0] = 100;

Page 7: Arrays and Strings

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: Arrays and Strings

8Use of Array for Our Problem

Store elements in array as read in Go back and access for deviations

Note declarationNote declaration

Page 9: Arrays and Strings

9

Declaring Arrays

Syntax: Data_type Array_name [constant];

Note declaration from our example

Tells how many elements set asideTells how many elements set aside

Page 10: Arrays and Strings

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 . . . scores : 85 79 92 57 68 80 . . . 0 1 2 3 4 5 98 99

Page 11: Arrays and Strings

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 . . . 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];

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

Index can be:- constant- variable- expressionMUST be an integer

Page 12: Arrays and Strings

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;

float f_list [50];

f_list [100] = 123.456;

Page 13: Arrays and Strings

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 }int results [5] = {14, 6, 23, 8, 12 }

float prices [ ] = { 2.41, 85.06, 19.95, 3.91 }float prices [ ] = { 2.41, 85.06, 19.95, 3.91 }

Page 14: Arrays and Strings

14

Arrays as Parameters

This is one task that CAN be done to the WHOLE array

C++ always passes arrays by reference

Page 15: Arrays and Strings

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 thearray alsopassed tocontrol loop

Page 16: Arrays and Strings

16

Arrays as Parameters

Note the empty brackets in parameter list » A number can be placed here but it

will beignored

Page 17: Arrays and Strings

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: Arrays and Strings

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: Arrays and Strings

19

Multidimensional Arrays

double sales[10][5];

Page 20: Arrays and Strings

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: Arrays and Strings

21

Accessing Array Elements

sales[2][3] = 35.60;

35.60

Page 22: Arrays and Strings

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: Arrays and Strings

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: Arrays and Strings

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: Arrays and Strings

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: Arrays and Strings

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: Arrays and Strings

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: Arrays and Strings

28C-Strings or Character Arrays

char str[80] = “Amanuensis”

Page 29: Arrays and Strings

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: Arrays and Strings

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: Arrays and Strings

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: Arrays and Strings

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: Arrays and Strings

C-Strings: Example-1#include<iostream>

#include<conio.h>

using namespace std;

int main()

{

const int MAX = 80; //maximum characters in a string

char str[MAX]; //string variable str

cout<< “Enter a string \n”;

cin>>str; //put string in str

cout<< “You entered: ” << str << endl; //display string from str

getch();

return 0; }

33

Page 34: Arrays and Strings

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 object

cout<< “You entered: ” << str << endl;

getch();

return 0; }

34

Page 35: Arrays and Strings

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: Arrays and Strings

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: Arrays and Strings

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: Arrays and Strings

Standard C++ string Class

38

#include<iostream>

#include<string> //string class

#include<conio.h>

using namespace std;

int main()

{ string s1(“Man”);

string s2 = “Beast”;

string s3;

s3 = s1; //assign

cout << “s3 = “ << s3 << endl;

s3 = “Neither “ + s1 + “ nor ”; //concatenate

s3 += s2; //concatenate

cout << “s3 = ” << s3 << endl;

s1.swap(s2); //swap s1 and s2

cout << s1 << ” nor “ << s2 << endl;

getch(); return 0; }

Page 39: Arrays and Strings

39

Contrast/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: Arrays and Strings

40

Working with Strings

Functions provided in #include <cstring>

Used instead of assignment

Used for comparisons

Page 41: Arrays and Strings

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: Arrays and Strings

Working with Strings

42

Page 43: Arrays and Strings

Passing Arrays to Functions

Arrays can be used as arguments to functions.

43

Page 44: Arrays and Strings

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