Lab 2: Experiment 5


The Program

For this experiment, you will write code for string variables.

Strings in C++ are represented using the string class. Unlike integers, real numbers, and characters, strings are not built into C++. They're added to the language through a library. A class defines what strings are. The name of the class is also the data type we need for our variables.

Since the string type is defined by a class, we must load a library to use the string data type. The library is conveniently named string, so we have add

#include <string>
to the program with the other #includes in the file. You should also have the
using namespace std;
in your program. (The original program for this experiment did.) It's good to have this line in every program, although it's only necessary for certain libraries (like string).

A string literal begins and ends with double quotes, with any number of characters between them (e.g., "a string", "another string"). Incidentally, it is not necessary to include the string library if you're only using string literals, although it doesn't really hurt.

String Declarations

Write declarations for string variables str1 and str2, initializing them to "Samson" and "Delilah", respectively. Do not get rid of any code. Compile and execute your code.

Question #2.5.1: What is the declaration that you added to your program?

You won't see any change in the execution since the declaration and initialization is purely internal. Once you can compile and execute the code without problems, add a statement to print out str1 and str2. The original program had this statement to print i and j:

cout << "i is " << i << "\n"
     << "j is " << j << endl;
Your new statement for str1 and str2 should look quite similar, replacing the integer variables with the string variables and changing the labels appropriately.

Now compile and execute the program. Make sure it prints the proper labels and values for the variables.

Question #2.5.2: What is the ouput statement you just added to your program?

Let's play around with these declarations.

String Initialization

In the integer experiment, we tried initializing an integer variable with various different types. Let's try this again for the string variables you just added to your program.

Initialize str1 to an integer. Compile your program.

Question #2.5.3: What is the first error or warning message that the compiler gives you? If it does compile (with or without warnings), what does it print for the new initialization?

Initialize str1 to a double. Compile your program.

Question #2.5.4: What is the first error or warning message that the compiler gives you? If it does compile (with or without warnings), what does it print for the new initialization?

Initialize str1 to a character. Compile your program.

Question #2.5.5: What is the first error or warning message that the compiler gives you? If it does compile (with or without warnings), what does it print for the new initialization?

Initialize str1 to be equal to cin. Compile your program.

Question #2.5.6: What is the first error or warning message that the compiler gives you? If it does compile (with or without warnings), what does it print for the new initialization?

It appears that string doesn't like any of these other types. You may find that your compiler gives very convoluted error messages since string is a class. Studying these messages now will make interpreting compiler messages easier when you're not expecting them.

Change your program back so that str1 is initialized to a string.

String Literals

Escape Characters

In the previous experiment, we took a look at escape characters. These characters can also be used in strings: "\t\tHello there!", "One line of text.\n", etc. Everything you learned about escape characters as chars also applies to them inside strings.

That was easy.

Number of Characters in a String Literal

As mentioned above, a string literal consists of two double quotes with any number of characters between them.

What exactly is meant by "any number of characters"? A negative number of characters seems silly. It is silly: we can't type a negative number of characters. It's more precise to say "any non-negative number of characters".

You initialized str1 and str2 with strings that had several characters in them. The output statements in your program have even longer string literals.

But how small can we make the strings? One character? Let's try it. Initialize str1 to "a", and add this output statement to the program:

cout << "str1 has size " << str1.size() << endl;

Question #2.5.7: Make a prediction: will this compile? If so, what will it display? If not, what error message will you get?

Compile and execute the program (if you can).

Question #2.5.8: If it compiled, what did it display? If not, what error message did you get? Compare the result with your prediction.

Keep in mind that the char type stores exactly one character, but that's not the only way to store a character---a string can have just one character in it. The output statements in the program use the string literal "\n"; as seen in the previous experiment, this is an escape character which really counts as one character. We could replace the double quotes with single quotes, but we'd have to change them back if we wanted to add more characters to those literals. Instead, let the string literal have just one character so that we can easily add more characters to the literal later on.

What about no characters at all? Initialize str1 to "".

Question #2.5.9: Make a prediction: will this compile? If so, what will it display? If not, what error message will you get?

Compile and execute the program (if you can).

Question #2.5.10: If it compiled, what did it display? If not, what error message did you get? Compare the result with your prediction.

Surprised? The literal "" is known as the empty string. And while it seems pointless in this program, it can be very useful when you build up a string from smaller strings, but that's a lesson for a different day.

Terminology

empty string, escape character
Back to the Lab Exercise  |  Forward to the Next Experiment
© 2003 by Prentice Hall. All rights reserved.
Report all errors to Jeremy D. Frens.