Upload
jocelyn-park
View
243
Download
0
Embed Size (px)
Citation preview
Topics for Discussion
• Character Testing
• Character Case Conversion
• Review of the Internal Storage of Strings
• Strings Stored in Arrays
• Library Functions for Working With Arrays
• String Numeric Conversion Functions
• Writing String Handling Functions
Character Testing
• In C a macro is a #define that takes arguments– It behaves like a function call– When a macro is called it is inserted directly into
the program– Replaced in C++ by the inline function
• Include the ctype.h header for the following macros:
Concept - The C++ Library provides macros for testing characters
Concept - The C++ Library provides macros for testing characters
#include <ctype.h>• isalpha returns True if a letter of the alphabet• isalnum returns True if a letter or number 0-9• isdigitreturns True if a number 0-9• islower returns True if a lower case letter• isprintreturns True if a printable character• ispunct returns True if a printable character other than a letter or
digit or space• isupper returns True if a uppercase letter• isspace returns True if a white space character
– space ' '
– newline '\n'
– vertical tab '\v '– tab '\t'
Program 10-1/* This program demonstrates some of the
character testing macros. */#include <iostream.h>#include <ctype.h>void main(void){
char Input;cout << "Enter any character: ";cin.get(Input);cout << "The character you entered is: " << Input << endl;cout << "Its ASCII code is: " << int(Input) << endl;if (isalpha(Input))
cout << "That's an alphabetic character.\n";if (isdigit(Input))
cout << "That's a numeric digit.\n";if (islower(Input))
cout << "The letter you entered is lowercase.\n";if (isupper(Input))
cout << "The letter you entered is uppercase.\n";if (isspace(Input))
cout << "That's a whitespace character.\n";}
Program Output Enter any character: A [Enter]The character you entered is: AIts ASCII code is: 65That's an alphabetic character.
The letter you entered is uppercase.
Program OutputEnter any character: 7 [Enter]The character you entered is: 7Its ASCII code is: 55
That's a numeric digit.
Program 10-2/* This program tests a customer number
to determine if it is in the proper format.*/
#include <iostream.h>#include <ctype.h>// Function prototypeint TestNum(char []);void main(void){
char Customer[8];cout << "Enter a customer number in the form ";cout << "LLLNNNN\n";cout << "(LLL = letters and NNNN = numbers): ";cin.getline(Customer, 8);
if (TestNum(Customer))cout << "That's a valid
customer number.\n";else{
cout << "That is not the proper format of the ";
cout << "customer number.\nHere is an example:\n";
cout << " ABC1234\n";}
}
Program 10-2// Definition of function TestNum. int TestNum(char CustNum[]){// Test the first three characters for letters
for (int Count = 0; Count < 3; Count++){
if (!isalpha(CustNum[Count]))return 0;
}// Test the last 4 characters for numeric digits
for (int Count = 3; Count < 7; Count++){
if (!isdigit(CustNum[Count]))return 0;
}return 1;
}
Program Output Enter a customer number in the
form LLLNNNN(LLL = letters and NNNN =
numbers): RQS4567 [Enter]
That's a valid customer number.
Program Output With Other Example Input
Enter a customer number in the form LLLNNNN
(LLL = letters and NNNN = numbers): AX467T9 [Enter]
That is not the proper format of the customer number.
Here is an example:
ABC1234
Character Case Conversion
• Touppper (tolower)– accepts a single character as an argument– if the character is lower case(upper case) it
returns the upper case(lower case) equivalent– if is already upper case(lower case) or not a
letter the original value is returned
• Call by value. The argument is not changed
• Must include ctype.h
Concept - The C++ Library provides functions for converting a character to upper or lower case.
Concept - The C++ Library provides functions for converting a character to upper or lower case.
Program 10-3/* This program calculates the area of a circle.
It asks the user if he or she wishes to continue. A loop that demonstrates the toupper function repeats until the user enters 'y', 'Y', 'n', or 'N'.*/
#include <iostream.h>#include <ctype.h>void main(void){
const float Pi = 3.14159;float Radius;char Go;
cout << "This program calculates the area of a circle.\n";cout.precision(2);cout.setf(ios::fixed);
do{cout << "Enter the circle's radius: ";cin >> Radius;cout << "The area is " << (Pi * Radius * Radius);cout << endl;do{cout << "Calculate another? (Y or N) ";cin >> Go;} while (toupper(Go) != 'Y' && toupper(Go) != 'N');} while (toupper(Go) == 'Y');
}
Program Output With Example Input
This program calculates the area of a circle.Enter the circle's radius: 10 [Enter]The area is 314.16Calculate another? (Y or N) b Enter]Calculate another? (Y or N) y [Enter]Enter the circle's radius: 1 [Enter]The area is 3.14
Calculate another? (Y or N) n [Enter]
Internal Storage of Strings Review
• The null character '\0' is used to terminate a character string
• A string constant is any literal string enclosed in " "– it has its own storage location just like the
variables of an array
• A string stored in an array can be processed using standard subscript notation.
Concept - In C++, a string is a sequence of characters stored in consecutive memory locations, terminated by a null character.
Concept - In C++, a string is a sequence of characters stored in consecutive memory locations, terminated by a null character.
Program 10-5/* This program cycles through a character array,
displaying each element until a null terminator is encountered.*/
#include <iostream.h>void main(void){
char Line[80];int Count = 0;cout << "Enter a sentence of no more than 79 characters:\n";cin.getline(Line, 80);cout << "The sentence you entered is:\n";while (Line[Count] != '\0'){
cout << Line[Count];Count++;
}}
Program Output Enter a sentence of no more than
79 characters:C++ is challenging but fun!
[Enter]The sentence you entered is:C++ is challenging but fun!
String Manipulators Review
• cin can be used to input a character string with no white space characterscin >>last_name; Edwards
• cin.getline can be used input a character string with spaces into an arraycin.getline(name,20); Daniel Edwards
• cin.get can be use to input a single character of any typecin.get(ch);
Enter
Enter
Enter
Strings Stored in Arrays• There is no data type for string variables.
– Character strings can be stored in character arrays
• There is no boundary checking for Strings.– Be sure the array is large enough to hold the null terminator
• An array name with no [ ] and subscripts is the address of the first element of the array.array = = &array[0] is true
• A string stored in an array can be processed using standard subscript notation.
Library Functions for Working With Character Arrays
strlen returns the length of a string not including the null terminator
int len; char Name[] ="Francis";
len = strlen (Name); cout << len; 7
strcat appends the contents of one string to anotherchar First[13] ="Francis", Second [] = "Bacon" ;
strcat (First, Second);
cout <<First <<" "<<Second; FrancisBacon Bacon
strcpy copies one string to anotherchar First[14] = "Francis", Name [] = "Francis Bacon"
strcpy (First, Name)
cout <<First <<" " <<Name; Francis Bacon Francis Bacon
Library Functions for Working With Character Arrays
strncpy copies a specified number of characters from string2to string1
char First [8], Name[] = "Francis Bacon";strncpy (first, Name, 7);cout << First <<" " <<Name; Francis Francis Bacon
strcmp compares the contents of two strings.returns 0 if string2 = = string1returns negative if string2 is > string 1returns positive if string2 is < string 1
strstr searches a string for the location of another stringchar Name[] = "Francis Bacon", Second[] = "Bacon" ;cout <<strstr (Name, Second); Bacon(because cout displays the string if given an address)
Program 10-6// This program uses the strstr function to
search an array of strings for a name.*/
#include <iostream.h>#include <string.h> // For strstrvoid main(void){
char Prods[5][27] = {"TV327 31 inch Television", "CD257 CD Player", "TA677 Answering Machine", "CS109 Car Stereo", "PC955 Personal Computer"};char LookUp[27], *StrPtr = NULL;int Index;
cout << "\tProduct Database\n\n";cout << "Enter a product number to search for: ";cin.getline(LookUp, 27);for (Index = 0; Index < 5; Index++){
StrPtr = strstr(Prods[Index], LookUp);
if (StrPtr != NULL)break;
}if (StrPtr == NULL)
cout << "No matching product was found.\n";else
cout << Prods[Index] << endl;}
Program Output
Product Database
Enter a product to search for: CD257 [Enter]
CD257 CD Player
Program Output With Example InputProduct Database
Enter a product to search for: CS [Enter]
CS109 Car Stereo
Program Output With Other Example InputProduct DatabaseEnter a product to search for: AB [Enter]
No matching product was found.
Differences BetweenStrings and Numbers
• There is a difference between numbers stored as strings and numbers stored as numeric values.– A character string of digits isn't a number but a series of ASCII
codes.• mathematical operations can not be performed on it
– It uses 1 byte of memory for each digit.• an int data type takes 2 bytes for the whole number
• The C++ library provides functions for converting a string representation of a number to a numeric data type and vice-versa.
10.5 String/Numeric Conversion Functions
• The C++ library provides functions for converting a string representation of a number to a numeric data type, and vice-versa.
• The functions in this section require the stdlib file to be included.
String Numeric Conversion Functions
atoi converts a string of digits into an integer .
atol converts a string of digits into a long integer.
atof converts a string of digits into a floating point number.
itoa converts an integer into a character string and stores it in an array.
Caution: make sure the array is large enough to hold all the characters plus the null terminator.
Program 10-7// This program demonstrates the strcmp and
atoi functions.
#include <iostream.h>#include <string.h> // For strcmp#include <stdlib.h> // For atoi
void main(void){
char Input[20];int Total = 0, Count = 0;float Average;cout << "This program will average a series of numbers.\n";cout << "Enter the first number or Q to quit: ";cin.getline(Input, 20);
while ((strcmp(Input, "Q") != 0)&&(strcmp(Input, "q") != 0)){
Total += atoi(Input); // Keep a running total
Count++; // Keep track of how many numbers entered
cout << "Enter the next number or Q to quit: ";
cin.getline(Input, 20);}if (Count != 0){
Average = Total / Count;cout << "Average: " << Average << endl;
}}
Program Output
This program will average a series of numbers.Enter the first number or Q to quit: 74 [Enter]Enter the next number or Q to quit: 98 [Enter]Enter the next number or Q to quit: 23 [Enter]Enter the next number or Q to quit: 54 [Enter]Enter the next number or Q to quit: Q [Enter]Average: 62
The C++ string Class
• Offers “ease of programming” advantages over the use of C-strings
• Need to #include the string header file
Program 10-12// This program demonstrates the C++ string class.
#include <iostream>
#include <string> // Required for the string class
using namespace std;
void main(void)
{
string movieTitle;
string name("William Smith");
movieTitle = "Wheels of Fury";
cout << "My favorite movie is " << movieTitle << endl;
}
Program outputMy favorite movie is Wheels of Fury
Program 10-13: Using cin with a string object
// This program demonstrates how cin can read a string into
// a string class object.
#include <iostream>
#include <string>
using namespace std;
void main(void)
{
string name;
cout << "What is your name? " << endl;
cin >> name;
cout << "Good morning " << name << endl;
}
Reading a line of input into a string class object
• Use the getline function to read a line of input, with spaces, into a string object. Example code:
string name;cout << “What is your name? “;getline(cin, name);
Comparing and Sorting string Objects
• You may use the relational operators to compare string objects: < > <= >= == !=
Program 10-14// This program uses the == operator to compare the string entered// by the user with the valid stereo part numbers.
#include <iostream>#include <string>using namespace std;
void main(void){
const float aprice = 249.0, bprice = 299.0;string partNum;
cout << "The stereo part numbers are:\n";cout << "\tBoom Box, part number S147-29A\n";cout << "\tShelf Model, part number S147-29B\n";cout << "Enter the part number of the stereo you\n";cout << "wish to purchase: ";cin >> partNum;cout << fixed << showpoint << precision(2);
Program 10-14 (continued)if (partNum == "S147-29A")
cout << "The price is $" << aprice << endl;else if (partNum == "S147-29B")
cout << "The price is $" << bprice << endl;else
cout << partNum << " is not a valid part number.\n";}
Program Output
The stereo part numbers are: Boom Box, part number S147-29A Shelf Model, part number S147-29BEnter the part number of the stereo youwish to purchase: S147-29A [Enter]The price is $249.00
Other Ways to Declare string Objects
Declaration Example Description
string address Declares an empty string object named address.
string name(“Bill Smith”); name is a string object initialized with “Bill Smith”
string person1(person2); person1 is initialized with a copy of person2. person2 may be either a string object or a char array.
See Table 10-8 (page 589) for more examples.
Table 10-10 Other Supported Operators
>> Extracts characters from a stream and inserts them into a string. Characters are copied until a whitespace or the end of the string is encountered.
<< Inserts a string into a stream.
= Assigns the string on the right to the string object on the left.
+= Appends a copy of the string on the right to the string object on the left.
+ Returns a string that is the concatenation of the two string operands.
[] Implements array-subscript notation, as in name[x]. A reference to the character in the x position is returned.
Program 10-17// This program demonstrates the C++ string class.#include <iostream>#include <string>using namespace std;
void main(void){
string str1, str2, str3;str1 = "ABC";str2 = "DEF";str3 = str1 + str2;cout << str1 << endl;cout << str2 << endl;cout << str3 << endl;str3 += "GHI";cout << str3 << endl;
}