Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Introducing the string Class

Поиск

The ISO/ANSI C++ Standard expanded the C++ library by adding a string class. So now, instead of using a character array to hold a string, you can use a type string variable (or object, to use C++ terminology). As you’ll see, the string class is simpler to use than the array and also provides a truer representation of a string as a type.

To use the string class, a program has to include the string header file. The string class is part of the std namespace, so you have to provide a using directive or else refer to the class as std::string. The class definition hides the array nature of a string and lets you treat a string much like an ordinary variable. Listing 4 illustrates some of the similarities and differences between string objects and character arrays.

 

Listing 4

#include <iostream>

#include <string> // make string class available

void main() {

using namespace std;

char charr1[20]; // create an empty array

char charr2[20] = “jaguar”; // create an initialized array

string str1; // create an empty string object

string str2 = “panther”; // create an initialized string

cout << “Enter a kind of feline: “;

cin >> charr1;

cout << “Enter another kind of feline: “;

cin >> str1; // use cin for input

cout << “Here are some felines:\n”;

cout << charr1 << “ “ << charr2 << “ “

<< str1 << “ “ << str2 // use cout for output

<< endl;

cout << “The third letter in “ << charr2 << “ is “

<< charr2[2] << endl;

cout << “The third letter in “ << str2 << “ is “

<< str2[2] << endl; // use array notation

}

 

Here is a sample run of the program in Listing 4:

Enter a kind of feline: ocelot

Enter another kind of feline: tiger

Here are some felines:

ocelot jaguar tiger panther

The third letter in jaguar is g

The third letter in panther is n

 

You should learn from this example that in many ways, you can use a string object in the same manner as a character array:

•You can initialize a string object to a C-style string.

•You can use cin to store keyboard input in a string object.

•You can use cout to display a string object.

•You can use array notation to access individual characters stored in a string object.

The main difference between string objects and character arrays shown in Listing 4 is that you declare a string object as a simple variable, not as an array:

 

string str1; // create an empty string object

string str2 = “panther”; // create an initialized string

 

The class design allows the program to handle the sizing automatically. For instance, the declaration for str1 creates a string object of length zero, but the program automatically resizes str1 when it reads input into str1:

 

cin >> str1; // str1 resized to fit input

 

This makes using a string object both more convenient and safer than using an array.

Conceptually, one thinks of an array of char as a collection of char storage units used to store a string but of a string class variable as a single entity representing the string.

 

Assignment, Concatenation, and Appending

The string class makes some operations simpler than is the case for arrays. For example, you can’t simply assign one array to another. But you can assign one string object to another:

 

char charr1[20]; // create an empty array

char charr2[20] = “jaguar”; // create an initialized array

string str1; // create an empty string object

string str2 = “panther”; // create an initialized string

charr1 = charr2; // INVALID, no array assignment

str1 = str2; // VALID, object assignment ok

 

The string class simplifies combining strings. You can use the + operator to add two string objects together and the += operator to tack on a string to the end of an existing string object.

Continuing with the preceding code, we have the following possibilities:

 

string str3;

str3 = str1 + str2; // assign str3 the joined strings

str1 += str2; // add str2 to the end of str1

 

Listing 5 illustrates these usages. Note that you can add and append C-style strings as well as string objects to a string object.

 

Listing 5

#include <iostream>

#include <string> // make string class available

void main() {

using namespace std;

string s1 = “penguin”;

string s2, s3;

cout << “You can assign one string object to another: s2 = s1\n”;

s2 = s1;

cout << “s1: “ << s1 << “, s2: “ << s2 << endl;

cout << “You can assign a C-style string to a string object.\n”;

cout << “s2 = \”buzzard\”\n”;

s2 = “buzzard”;

cout << “s2: “ << s2 << endl;

cout << “You can concatenate strings: s3 = s1 + s2\n”;

s3 = s1 + s2;

cout << “s3: “ << s3 << endl;

cout << “You can append strings.\n”;

s1 += s2;

cout <<”s1 += s2 yields s1 = “ << s1 << endl;

s2 += “ for a day”;

cout <<”s2 += \” for a day\” yields s2 = “ << s2 << endl;

}

 

Recall that the escape sequence \” represents a double quotation mark that is used as a literal character rather than as marking the limits of a string.

 

Here is the output from the program in Listing 5:

You can assign one string object to another: s2 = s1

s1: penguin, s2: penguin

You can assign a C-style string to a string object.

s2 = “buzzard”

s2: buzzard

You can concatenate strings: s3 = s1 + s2

s3: penguinbuzzard

You can append strings.

s1 += s2 yields s1 = penguinbuzzard

s2 += “ for a day” yields s2 = buzzard for a day

 

More string Class Operations

Even before the string class was added to C++, programmers needed to do things like assign strings. For C-style strings, they used functions from the C library for these tasks. The cstring header file (formerly string.h) supports these functions. For example, you can use the strcpy() function to copy a string to a character array, and you can use the strcat() function to append a string to a character array:

 

strcpy(charr1, charr2); // copy charr2 to charr1

strcat(charr1, charr2); // append contents of charr2 to char1

 

Working with string objects tends to be simpler than using the C string functions. This is especially true for more complex operations. For example, the library equivalent of

 

str3 = str1 + str2;

 

is this:

 

strcpy(charr3, charr1);

strcat(charr3, charr2);

 

Furthermore, with arrays, there is always the danger of the destination array being too small to hold the information, as in this example:

 

char site[10] = “house”;

strcat(site, “ of pancakes”); // memory problem

 

The strcat() function would attempt to copy all 12 characters into the site array, thus overrunning adjacent memory. This might cause the program to abort, or the program might continue running, but with corrupted data. The string class, with its automatic resizing as necessary, avoids this sort of problem. The C library does provide cousins to strcat() and strcpy(), called strncat() and strncpy(), that work more safely by taking a third argument to indicate the maximum allowed size of the target array, but using them adds another layer of complexity in writing programs.

Notice the different syntax used to obtain the number of characters in a string:

 

int len1 = str1.size(); // obtain length of str1

int len2 = strlen(charr1); // obtain length of charr1

 

The strlen() function is a regular function that takes a C-style string as its argument and that returns the number of characters in the string. The size() function basically does the same thing, but the syntax for it is different. Instead of appearing as a function argument, str1 pre-cedes the function name and is connected to it with a dot. As you saw with the put() method, this syntax indicates that str1 is an object and that size() is a class method. A method is a function that can be invoked only by an object belonging to the same class as the method. In this particular case, str1 is a string object, and size() is a string method. In short, the C functions use a function argument to identify which string to use, and the C++ string class objects use the object name and the dot operator to indicate which string to use.

 


More on string Class I/O

As you’ve seen, you can use cin with the >> operator to read a string object and cout with the >> operator to display a string object using the same syntax you use with a C-style string. But reading a line at a time instead of a word at time uses a different syntax. Listing 6 shows this difference.

 

Listing 6

#include <iostream>

#include <string> // make string class available

#include <cstring> // C-style string library

void main() {

using namespace std;

char charr[20];

string str;

cout << “Length of string in charr before input: “

<< strlen(charr) << endl;

cout << “Length of string in str before input: “

<< str.size() << endl;

cout << “Enter a line of text:\n”;

cin.getline(charr, 20); // indicate maximum length

cout << “You entered: “ << charr << endl;

cout << “Enter another line of text:\n”;

getline(cin, str); // cin now an argument; no length specifier

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

cout << “Length of string in charr after input: “

<< strlen(charr) << endl;

cout << “Length of string in str after input: “

<< str.size() << endl;

}

 

Here’s a sample run of the program in Listing 6:

Length of string in charr before input: 27

Length of string in str before input: 0

Enter a line of text:

peanut butter

You entered: peanut butter

Enter another line of text:

blueberry jam

You entered: blueberry jam

Length of string in charr after input: 13

Length of string in str after input: 13

 

This is the code for reading a line into an array:

 

cin.getline(charr, 20);

 

The dot notation indicates that the getline() function is a class method for the istream class. (Recall that cin is an istream object.) As mentioned earlier, the first argument indicates the destination array, and the second argument is the array size, which getline() used to avoid overrunning the array.

This is the code for reading a line into a string object:

 

getline(cin,str);

 

There is no dot notation, which indicates that this getline() is not a class method. So it takes cin as an argument that tells it where to find the input. Also, there isn’t an argument for the size of the string because the string object automatically resizes to fit the string.

 

Lab Overview

2.1. Read the theory and answer Control Questions.

2.2. Develop the algorithm flowchart to solve a problem according to individual case from the Table below.

2.3. Write the program code according to the developed algorithm.

2.4. Debug the program, run it and make screenshots.

2.5. Prepare the Lab Report according to the required structure.

 

# Task
1. Calculate the following statistics for a text: number of commas, dots, spaces
2. Calculate a number of words in the text
3. Calculate a number of key symbols in the text
4. Calculate an average word’s length in the text
5. Output words with key symbols
6. Delete words with key symbols
7. Output the longest word of the text
8. Output words with length more than indicated by a user
9. Calculate the percentage of consonants letters in the text
10. Output the shortest word of the text
11. Output words which starts with uppercase symbol
12. Output words which starts with lowercase symbol
13. Output numbers which are in the text
14. Find the number of text sentences
15. Substitute all “is” with “are” in the text
16. Output all text words in reverse order
17. Output all letters which are the same for both sentences
18. Calculate the percentage of vowel letters in the text
19. Check if the numbers of open and close brackets are the same
20. Find all positions of key symbol in a text

 

Report Structure

- Title page

- Task overview

- Algorithm’s flowchart

- Program code

- Program running screenshots

- Conclusions

 

Control Questions

4.1. What is a string?

4.2. What is ‘\0’ symbol?

4.3. How may we declare a string?

4.4. How to access string items?

4.5. How to read one word?

4.6. How to read a text line?

4.7. Describe the function getline.

4.8. Describe the function gets.

4.9. What is the class “string”?

4.10. Concatenation of strings.

4.11. Appending to a string.

 

References

5.1. Juan Soulié. C++ Language Tutorial. – 2007. – p. 60-62.

5.2. Sharam Hekmat. C++ Essentials. – PragSoft Corporation 2005. – p. 13-14.

5.3. Prata S. C++ Primer Plus (5th Edition). – Sams, 2004. – p. 114-130.


Annex A

Report’s Title Page

 

MINISTRY OF EDUCATION AND SCIENCE, YOUTH AND SPORT OF UKRAINE

TERNOPIL NATIONAL ECONOMIC UNIVERSITY

FACULTY OF COMPUTER INFORMATION TECHNOLOGIES

AMERICAN-UKRAINIAN SCHOOL OF COMPUTER SCIENCE

 

REPORT

on Lab#__

from discipline “Algorithmization and Programming”

Topic: _______________________________________________

 

 

Performed by student of group CSUAP-11

_________________________________

Checked by Dr. Ihor Paliy

 

Ternopil – 2012


 

 

Підписано до друку 22.06.2012р.

Формат 60х84/16. Папір офсетний.

Друк на дублікаторі. Зам. № 6-1984

Умов.-друк. арк. 2,56. Обл.-вид. арк. 2,76.

Тираж 50 прим.

 

Віддруковано ФО-П Шпак В.Б.

Свідоцтво про державну реєстрацію: В02 № 924434 від 11.12.2006 р.

Свідоцтво платника податку: Серія Е № 897220

м. Тернопіль, вул. Просвіти, 6

тел. 097 299 38 99, 063 300 86 72

E-mail: tooums@ukr.net



Поделиться:


Последнее изменение этой страницы: 2016-04-18; просмотров: 201; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.89.152 (0.008 с.)