cs102 introduction to computer programming chapter 10 characters and strings

36
CS102 Introduction to Computer Programming Chapter 10 Characters and Strings

Upload: jocelyn-park

Post on 30-Dec-2015

244 views

Category:

Documents


0 download

TRANSCRIPT

CS102Introduction to Computer

Programming

Chapter 10 Characters and Strings

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;

}

Program Output With Example Input

What is your name? PeggyGood morning Peggy

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;

}

Program Output

ABC

DEF

ABCDEF

ABCDEFGHI

string class member functions

• Many member functions exist.

• See Table 10-10 (pages 592-594)