Introduction
In this lab, you will learn strings in C++. You will learn how to define and initialize strings, and how to use string functions.
In this lab, you will learn strings in C++. You will learn how to define and initialize strings, and how to use string functions.
C++ supports two types of strings:
char
array, terminated with a NULL
character '\0'
(Hex 0
). It is also called Character-String or C-style string.string
class introduced in C++98.The "high-level" string
class is recommended, because it is much easier to use and understood. However, many legacy programs used C-strings; many programmers also use "low-level" C-strings for full control and efficiency; furthermore, in some situation such as command-line arguments, only C-strings are supported. Hence, you may have to understand both sets of strings.
To use the string
class, include the <string>
header and "using namespace std
".
You can declare and initialize a string with a string literal, initialize to an empty string, or initialize with another string object. For example,
#include <string>
using namespace std;
string str1("Hello"); // Initialize with a string literal (Implicit initialization)
string str2 = "world"; // Initialize with a string literal (Explicit initialization via assignment operator)
string str3; // Initialize to an empty string
string str4(str1); // Initialize by copying from an existing string object
For example
/* Testing string class input and output */
#include <iostream>
#include <string> // Need this header to use string class
#include <limits>
using namespace std; // Also needed for <string>
int main() {
string message("Hello");
cout << message << endl;
// Input a word (delimited by space) into a string
cout << "Enter a message (no space): ";
cin >> message;
cout << message << endl;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
// flush cin up to newline (need <limits> header)
// Input a line into a string
cout << "Enter a message (with spaces): ";
getline(cin, message); // Read input from cin into message
cout << message << endl;
return 0;
}
Output:
Hello
Enter a message (no space): hello
hello
Enter a message (with spaces): hello world
hello world
NOTES:
#include <string>
" to use the string
class, and "using namespace std
" as string
is defined under std
namespace.cin >> aStr
" reads a word (delimited by space) from cin
(keyboard), and assigns to string
variable aStr
.getline(cin, aStr)
reads the entire line (up to '\n'
) from cin
, and assigns to aStr
. The '\n'
character is discarded.cin
, you could use ignore(numeric_limits<streamsize>::max(), '\n')
function to discard all the characters up to '\n'
. numeric_limits
is in the <limits>
header.Checking the length of a string:
string str("Hello, world");
// both of them return the length of the string
cout << str.length() << endl; // 12
cout << str.size() << endl; // 12
Check for empty string:
string str1("Hello, world");
string str2; // Empty string
// Check if the string is empty.
cout << str1.empty() << endl; // 0 (false)
cout << str2.empty() << endl; // 1 (true)
Copying from another string: Simply use the assignment "=" operator.
string str1("Hello, world"), str2;
str2 = str1;
cout << str2 << endl; // Hello, world
Concatenated with another string: Use the plus "+" operator, or compound plus "+=".
string str1("Hello,");
string str2(" world");
cout << str1 + str2 << endl; // "Hello, world"
cout << str1 << endl; // "Hello,"
cout << str2 << endl; // " world"
str1 += str2;
cout << str1 << endl; // "Hello, world"
cout << str2 << endl; // " world"
string str3 = str1 + str2;
cout << str3 << endl; // "Hello, world world"
str3 += "again";
cout << str3 << endl; // "Hello, world worldagain"
Read/Write individual character of a string:
string str("Hello, world");
// Return the char at index, index begin at 0. Perform index bound check.
cout << str.at(0) << endl; // 'H'
cout << str[1] << endl; // 'e'
cout << str.at(str.length() - 1) << endl; // 'd'
str.at(1) = 'a'; // Write to index 1
cout << str << endl; // "Hallo, world"
str[0] = 'h';
cout << str << endl; // "hallo, world"
Extracting sub-string:
string str("Hello, world");
// Return the sub-string starting at beginIndex, of size
cout << str.substr(2, 6) << endl; // "llo, w"
Comparing with another string:
string str1("Hello"), str2("Hallo"), str3("hello"), str4("Hello");
cout << str1.compare(str2) << endl; // 1 'e' > 'a'
cout << str1.compare(str3) << endl; // -1 'h' < 'H'
cout << str1.compare(str4) << endl; // 0
// You can also use the operator == or !=
if (str1 == str2) cout << "Same" << endl;
if (str3 != str4) cout << "Different" << endl;
cout << boolalpha; // print bool as true/false
cout << (str1 != str2) << endl;
cout << (str1 == str4) << endl;
Search/Replacing characters: You can use the functions available in the #include <algorithm>
For example,
#include <algorithm>
......
string str("Hello, world");
replace(str.begin(), str.end(), 'l', '_');
cout << str << endl; // He__o, wor_d
Example
/* Example on C++ string function */
#include <iostream>
#include <string> // use string class
using namespace std;
int main() {
string msg = "hello, world!";
cout << msg << endl;
cout << msg.length() << endl; // length of string
cout << msg.at(1) << endl; // char at index 1
cout << msg[1] << endl; // same as above
cout << msg.empty() << endl; // test for empty string
cout << msg.substr(3, 3) << endl; // sub-string begins at
// pos 3 of size 3
cout << msg.replace(3, 3, "why") << endl; // replace sub-string
cout << msg.append("end") << endl; // append behind
cout << msg + "end" << endl; // same as above
cout << msg.insert(3, "insert") << endl; // insert after pos 3
string msg1;
msg1 = msg; // copy
cout << msg1 << endl;
cout << "Enter a line: ";
getline(cin, msg); // read a line of input
cout << msg << endl;
}
Output:
hello, world!
13
e
e
0
lo,
helwhy world!
helwhy world!end
helwhy world!endend
helinsertwhy world!end
helinsertwhy world!end
Enter a line: a
a
String is another important data type other than numbers. In this section, we talked about the use of strings, C++ provides many useful methods to deal with strings, learn to use them with ease.