1 / 44

Arrays and Strings

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.

Télécharger la présentation

Arrays and Strings

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Arrays and Strings Lecture: 25 19.09.2012

  2. Why?? Design Problem • Consider a program to calculate class average ?

  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

  4. Possible Solutions  • Enter in the scores again • Use 100 separate variables • and cout and cin commands • Read (then re-read) from a file • The real answer …   Use arrays!!

  5. avg : 84.35 ch : ‘A’ x : 15 scores : 85 79 92 57 68 80 name : ‘C’ ‘L’ ‘Y’ ‘D’ ‘E’ Simple 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

  6. cout << scores[2];scores[0] = 100; 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 80 0 1 2 3 4 5

  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

  8. Note declaration Use of Array for Our Problem • Store elements in array as read in • Go back and access for deviations

  9. Tells how many elements set aside Declaring Arrays • Syntax: Data_type Array_name [constant]; • Note declaration from our example

  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

  11. Accessing 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 Index can be:- constant- variable- expressionMUST be an integer max = scores[0];for (x = 0; x < 100; x++) if (scores[x] > max) max = scores[x];

  12. Out of Bounds Index float f_list [50]; f_list [100] = 123.456; • 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 (??)

  13. Initializing 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 }

  14. Arrays as Parameters • This is one task that CAN be done to the WHOLE array • C++ always passes arrays by reference

  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

  16. Arrays as Parameters • Note the empty brackets in parameter list • A number can be placed here but it will beignored

  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.

  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

  19. Multidimensional Arrays double sales[10][5];

  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

  21. Accessing Array Elements sales[2][3] = 35.60; 35.60

  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 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 are not specified, the unspecified components are initialized to zero

  23. 2-DIM. Array Initialization • Example: intanArray[3][5] = { { 1, 2, 3, 4, 5, }, // row 0 { 6, 7, 8, 9, 10, }, // row 1 { 11, 12, 13, 14, 15 } // row 2 };

  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 (intnRow = 0; nRow < nNumRows; nRow++)      for (intnCol = 0; nCol < nNumCols; nCol++) cout << anArray[nRow][nCol];

  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: dataTypearrayName[intExp1][intExp2]...[intExpn]; where intExp1, intExp2, …are constant expressions yielding positive integer values Example: 3-Dimensional array: intanArray[5][4][3];

  26. C-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

  27. C-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

  28. C-Strings or Character Arrays char str[80] = “Amanuensis”

  29. C-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'

  30. C-Strings or Character Arrays • Consider the statement char 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

  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

  32. greeting = “don’t do it; 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

  33. 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; }

  34. 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; }

  35. 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; }

  36. 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; }

  37. 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; }

  38. Standard C++ string Class #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; }

  39. 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 Contrast/Compare Strings and C-Strings

  40. Used instead of assignment Used for comparisons Working with Strings • Functions provided in #include <cstring>

  41. 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 • The string "Air" is smaller than the string "Boat" • The string "Air" is smaller than the string "An" • The string "Bill" is smaller than the string "Billy" • The string "Hello" is smaller than "hello"

  42. Working with Strings

  43. Passing Arrays to Functions Arrays can be used as arguments to functions.

  44. 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; }

More Related