Programming C++
BWB 10203
Chapter 5: Arrays and Strings
Objectives
In this chapter, you will:
Learn about arrays
Explore how to declare and manipulate data into
arrays
Understand the meaning of array index out of
bounds
Become familiar with the restrictions on array
processing
Discover how to pass an array as a parameter to
a function
2
Objectives (continued)
Learn about C-strings
Examine the use of string functions to
process C-strings
Discover how to input data intoand output
data froma C-string
Learn about parallel arrays
Discover how to manipulate data in a twodimensional array
Learn about multidimensional arrays
3
Data Types
A data type is called simple if variables of that
type can store only one value at a time
A structured data type is one in which each
data item is a collection of other data items
Arrays
Array: a collection of a fixed number of
components wherein all of the components
have the same data type
In a one-dimensional array, the components
are arranged in a list form
Syntax for declaring a one-dimensional array:
intExp evaluates to a positive integer
5
Arrays (continued)
Example:
int num[5];
Accessing Array Components
General syntax:
where indexExp, called an index, is any expression
whose value is a nonnegative integer
Index value specifies the position of the
component in the array
[] is the array subscripting operator
The array index always starts at 0
7
Accessing Array Components
(continued)
Accessing Array Components
(continued)
Accessing Array Components
(continued)
10
Accessing Array Components
(continued)
11
Processing One-Dimensional Arrays
Some basic operations performed on a onedimensional array are:
Initializing
Inputting data
Outputting data stored in an array
Finding the largest and/or smallest element
Each operation requires ability to step through
the elements of the array
Easily accomplished by a loop
12
Processing One-Dimensional Arrays
(continued)
Consider the declaration
int list[100];
int i;
//array of size 100
Using for loops to access array elements:
for (i = 0; i < 100; i++)
//process list[i]
//Line 1
//Line 2
Example:
for (i = 0; i < 100; i++) //Line 1
cin >> list[i];
//Line 2
13
Array Index Out of Bounds
If we have the statements:
double num[10];
int i;
The component num[i] is valid if i = 0, 1, 2,
3, 4, 5, 6, 7, 8, or 9
The index of an array is in bounds if the index
>=0 and the index <= ARRAY_SIZE-1
Otherwise, we say the index is out of bounds
In C++, there is no guard against indices that
are out of bounds
15
Array Initialization During
Declaration
Arrays can be initialized during declaration
In this case, it is not necessary to specify the size
of the array
Size determined by the number of initial values in the
braces
Example:
double sales[] = {12.25, 32.50, 16.90, 23, 45.68};
16
Partial Initialization of Arrays
During Declaration
The statement:
int list[10] = {0};
declares list to be an array of 10 components
and initializes all of them to zero
The statement:
int list[10] = {8, 5, 12};
declares list to be an array of 10 components,
initializes list[0] to 8, list[1] to 5,
list[2] to 12 and all other components are
initialized to 0
17
Partial Initialization of Arrays
During Declaration (continued)
The statement:
int list[] = {5, 6, 3};
declares list to be an array of 3 components
and initializes list[0] to 5, list[1] to 6, and
list[2] to 3
The statement:
int list[25]= {4, 7};
declares an array of 25 components; initializes
list[0] to 4 and list[1] to 7; all other
components are initialized to 0
18
Some Restrictions on Array
Processing
Consider the following statements:
C++ does not allow aggregate operations on
an array:
Solution:
19
Some Restrictions on Array
Processing (continued)
The following is illegal too:
Solution:
The following statements are legal, but do not
give the desired results:
20
Arrays as Parameters to Functions
Arrays are passed by reference only
The symbol & is not used when declaring an
array as a formal parameter
The size of the array is usually omitted
If provided, it is ignored by the compiler
21
Constant Arrays as Formal
Parameters
22
Base Address of an Array and
Array in Computer Memory
The base address of an array is the address, or
memory location of the first array component
If list is a one-dimensional array, its base
address is the address of list[0]
When we pass an array as a parameter, the
base address of the actual array is passed to
the formal parameter
23
Functions Cannot Return a Value
of the Type Array
C++ does not allow functions to return a value
of the type array
25
Integral Data Type and Array
Indices
C++ allows any integral type to be used as an
array index
Example:
26
Other Ways to Declare Arrays
27
C-Strings (Character Arrays)
Character array: an array whose components
are of type char
C-strings are null-terminated ('\0') character
arrays
Example:
'A' is the character A
"A" is the C-string A
"A" represents two characters, 'A' and '\0
28
C-Strings (Character Arrays)
(continued)
Consider the statement
char name[16];
Since C-strings are null terminated and name
has 16 components, the largest string that it
can store has 15 characters
If you store a string of length, say 10 in name
The first 11 components of name are used
and the last five are left unused
29
C-Strings (Character Arrays)
(continued)
The statement
char name[16] = "John";
declares an array name of length 16 and
stores the C-string "John" in it
The statement
char name[] = "John";
declares an array name of length 5 and stores
the C-string "John" in it
30
C-Strings (Character Arrays)
(continued)
31
String Comparison
C-strings are compared character by
character using the collating sequence of the
system
If we are using the ASCII character set
"Air" < "Boat"
"Air" < "An"
"Bill" < "Billy"
"Hello" < "hello"
32
Reading and Writing Strings
Most rules that apply to arrays apply to Cstrings as well
Aggregate operations, such as assignment and
comparison, are not allowed on arrays
Even the input/output of arrays is done
component-wise
The one place where C++ allows aggregate
operations on arrays is the input and output of
C-strings (that is, character arrays)
34
String Input
cin >> name; stores the next input Cstring into name
To read strings with blanks, use get:
cin.get(str, m+1);
Stores the next m characters into str but the
newline character is not stored in str
If the input string has fewer than m
characters, the reading stops at the newline
character
35
String Output
cout << name; outputs the content of
name on the screen
<< continues to write the contents of name
until it finds the null character
If name does not contain the null character,
then we will see strange output
<< continues to output data from memory
adjacent to name until '\0' is found
36
Specifying Input/Output Files at
Execution Time
You can let the user specify the name of the
input and/or output file at execution time:
37
string Type and Input/Output
Files
Argument to the function open must be a
null-terminated string (a C-string)
If we use a variable of type string to read
the name of an I/O file, the value must first be
converted to a C-string before calling open
Syntax:
strVar.c_str()
where strVar is a variable of type string
38
Parallel Arrays
Two (or more) arrays are called parallel if
their corresponding components hold related
information
Example:
int studentId[50];
char courseGrade[50];
39
Two-Dimensional Arrays
Two-dimensional array: collection of a fixed
number of components (of the same type)
arranged in two dimensions
Sometimes called matrices or tables
Declaration syntax:
where intexp1 and intexp2 are expressions
yielding positive integer values, and specify the
number of rows and the number of columns,
respectively, in the array
40
Two-Dimensional Arrays
(continued)
41
Accessing Array Components
Syntax:
where indexexp1 and indexexp2 are
expressions yielding nonnegative integer values,
and specify the row and column position
42
Accessing Array Components
(continued)
43
Two-Dimensional Array
Initialization During Declaration
Two-dimensional arrays can be initialized
when they are declared:
Elements of each row are enclosed within
braces and separated by commas
All rows are enclosed within braces
For number arrays, if all components of a row
arent specified, unspecified ones are set to 0
44
Two-Dimensional Arrays and
Enumeration Types
45
Processing Two-Dimensional
Arrays
Ways to process a two-dimensional array:
Process the entire array
Process a particular row of the array, called
row processing
Process a particular column of the array, called
column processing
Each row and each column of a twodimensional array is a one-dimensional array
To process, use algorithms similar to
processing one-dimensional arrays
46
Processing Two-Dimensional
Arrays (continued)
47
Initialization
To initialize row number 4 (i.e., fifth row) to 0
To initialize the entire matrix to 0:
48
Print
To output the components of matrix:
49
Input
To input data into each component of
matrix:
50
Sum by Row
To find the sum of row number 4 of matrix:
To find the sum of each individual row:
51
Sum by Column
To find the sum of each individual column:
52
Largest Element in Each Row and
Each Column
53
Reversing Diagonal
Before:
54
Reversing Diagonal (continued)
To reverse both the diagonals:
55
Reversing Diagonal (continued)
After:
56
Passing Two-Dimensional Arrays as
Parameters to Functions
Two-dimensional arrays can be passed as
parameters to a function
Pass by reference
Base address (address of first component of the
actual parameter) is passed to formal parameter
Two-dimensional arrays are stored in row
order
When declaring a two-dimensional array as a
formal parameter, can omit size of first
dimension, but not the second
57
Arrays of Strings
Strings in C++ can be manipulated using
either the data type string or character arrays
(C-strings)
On some compilers, the data type string
may not be available in Standard C++ (i.e.,
non-ANSI/ISO Standard C++)
58
Arrays of Strings and the string
Type
To declare an array of 100 components of
type string:
string list[100];
Basic operations, such as assignment,
comparison, and input/output, can be
performed on values of the string type
The data in list can be processed just like
any one-dimensional array
59
Arrays of Strings and C-Strings
(Character Arrays)
60
Another Way to Declare a TwoDimensional Array
Consider the following:
To declare an array of 20 rows and 10
columns:
61
Multidimensional Arrays
Multidimensional array: collection of a fixed
number of elements (called components)
arranged in n dimensions (n >= 1)
Also called an n-dimensional array
Declaration syntax:
To access a component:
62
Multidimensional Arrays (continued)
When declaring a multidimensional array as a
formal parameter in a function
Can omit size of first dimension but not other
dimensions
As parameters, multidimensional arrays are
passed by reference only
A function cannot return a value of the type array
There is no check if the array indices are within
bounds
63
Programming Example: Code
Detection
When a message is transmitted in secret code
over a transmission channel, it is usually
transmitted as a sequence of bits (0s and 1s)
Due to noise in the transmission channel, the
transmitted message may become corrupted
Message received at destination is not the
same as the message transmitted
Some of the bits may have been changed
64
Programming Example: Code
Detection (continued)
Several techniques to check the validity of the
transmitted message at the destination
One technique is to transmit the same
message twice
At the destination, both copies of the message
are compared bit by bit
If the corresponding bits are the same, the
message received is error-free
65
Programming Example: Code
Detection (continued)
We write a program to check if the message
received at the destination is error-free
For simplicity, assume that:
The secret code representing the message is
a sequence of digits (0 to 9)
The maximum length of the message is 250
digits
The first number in the message is the length
of the message
66
Programming Example: Code
Detection (continued)
If the secret code is
7 9 2 7 8 3 5 6
then the message is seven digits long
The above message is transmitted (twice) as
7 9 2 7 8 3 5 6 7 9 2 7 8 3 5 6
Input: a file containing the secret code and its
copy
Output: the secret code, its copy, and a
message if the received code is error-free
67
Programming Example: Code
Detection (continued)
The results are output in the following form:
Code Digit
9
2
7
8
3
5
6
Code Digit Copy
9
2
7
8
3
5
6
Message transmitted OK
68
Programming Example: Problem
Analysis
Because we have to compare digits of the
secret code and its copy:
First, read the secret code and store it in an
array
Next, read first digit of the copy and compare it
with the first digit of the code, and so on
If any corresponding digits are not the same,
print a message next to the digits
The first number in the secret code, and in the
copy, indicates the length of the code
69
Programming Example: Algorithm
Design
Open the input and output files
If the input file does not exist, exit the
program
Read the length of the secret code
If the length of the secret code is greater than
250, terminate the program because the
maximum length of the code in this program
is 250
Read and store the secret code into an array
70
Programming Example: Algorithm
Design (continued)
Read the length of the copy
If the length of the secret code and its copy
are the same, compare the codes; otherwise,
print an error message
Note: To simplify function main, write a
function, readCode, to read the secret code
and another function, compareCode, to
compare the codes
71
Programming Example:
readCode
First, read length of secret code
If length of secret code is greater than 250
Set lenCodeOk (a reference parameter) to
false and the function terminates
Value of lenCodeOk is passed to calling
function to indicate if secret code was read
successfully
If length of code is less than 250, readCode
reads and stores secret code into an array
72
Programming Example:
readCode (continued)
73
Programming Example:
compareCode
Set a bool variable codeOk to true
If length of code and copy are not equal
Output error message and terminate function
For each digit in input file
Read the next digit of secret code copy
Output digits from code and copy
If corresponding digits are not equal, output
error message and set codeOk to false
If codeOk, output message indicating code
transmitted OK, else output an error message
74
Programming Example:
compareCode (continued)
75
Programming Example:
compareCode (continued)
76
Programming Example: Main
Algorithm
Declare variables
Open the files
Call readCode to read the secret code
If (length of the secret code <= 250)
Call compareCode to compare the codes
else
Output an appropriate error message
77
Summary
Array: structured data type with a fixed
number of components of the same type
Components are accessed using their relative
positions in the array
Elements of a one-dimensional array are
arranged in the form of a list
An array index can be any expression that
evaluates to a nonnegative integer
Must always be less than the size of the array
78
Summary (continued)
The base address of an array is the address
of the first array component
When passing an array as an actual
parameter, you use only its name
Passed by reference only
A function cannot return a value of the type
array
In C++, C-strings are null terminated and are
stored in character arrays
79
Summary (continued)
Commonly used C-string manipulation
functions include:
strcpy, strcmp, and strlen
Parallel arrays are used to hold related
information
In a two-dimensional array, the elements are
arranged in a table form
80
Summary
To access an element of a two-dimensional
array, you need a pair of indices:
One for the row position
One for the column position
In row processing, a two-dimensional array is
processed one row at a time
In column processing, a two-dimensional
array is processed one column at a time
81