C++ string
last modified January 9, 2023
C++ string tutorial shows how to work with strings in C++.
A string is a sequence of characters. C++ has the std::string
type to represent strings.
The characters in a string literal must be enclosed between double quotation marks.
C++ string access characters
To access the characters of a string, we can use the []
operator
or the at
method. In addition, the front
method
accesses the first character and the back
the last character.
#include <iostream> using std::cout; using std::endl; using std::string; int main() { string msg = "an old falcon"; cout << msg.at(4) << endl; cout << msg[5] << endl; cout << msg.front() << endl; cout << msg.back() << endl; return 0; }
In the example, we access characters of a string.
$ ./access l d a
C++ string concatenate
The +
operator is used to concatenate strings.
#include <iostream> using std::string; using std::cin; using std::cout; using std::endl; int main() { string name, msg; cout << "Enter your name: "; getline(cin, name); msg = "Hello " + name + "!"; cout << msg << endl; return 0; }
With the getline
method, we read the input from a user and
concatenate it with other strings to form a message.
$ ./concat Enter your name: Jan Hello Jan!
C++ string to int
The stoi
function converts a string to a signed integer.
#include <iostream> #include <string> using std::string; using std::cout; using std::endl; using std::stoi; int main () { string str1 = "12"; string str2 = "18.97"; string str3 = "4 foxes"; int val1 = stoi(str1); int val2 = stoi(str2); int val3 = stoi(str3); cout << val1 << endl; cout << val2 << endl; cout << val3 << endl; return 0; }
We convert three strings to integers.
$ ./str2int 12 18 4
C++ string modify
C++ has several methods to modify strings.
#include <iostream> using std::string; using std::cout; using std::endl; int main() { string msg = "an old"; msg.append(" falcon"); cout << msg << endl; msg.push_back('.'); cout << msg << endl; msg.pop_back(); cout << msg << endl; msg.erase(0, 3); cout << msg << endl; msg.insert(4, "gray "); cout << msg << endl; msg.replace(9, 6, "eagle"); cout << msg << endl; msg.clear(); cout << msg.size() << endl; return 0; }
In the example, the initial string is modified with append
,
push_back
, pop_back
, erase
,
insert
, replace
, and clear
methods.
$ ./modify an old falcon an old falcon. an old falcon old falcon old gray falcon old gray eagle 0
C++ string compare
Strings are compared with the compare
method.
#include <iostream> using std::string; using std::cout; using std::endl; int main() { string word1 = "blue"; string word2 = "blues"; if (word1.compare(word2) == 0) { cout << "words are equal" << endl; } else { cout << "words are not equal" << endl; } if (word1.compare(0, 4, word2, 0, 4) == 0) { cout << "words are equal" << endl; } else { cout << "words are not equal" << endl; } return 0; }
We compare two words. In the second case, we specify the range of characters to compare.
$ ./comparing words are not equal words are equal
C++ substring
The substr
function returns a substring.
#include <iostream> #include <string> using std::string; using std::cout; using std::endl; int main() { string word = "an old falcon"; cout << word.substr(0, 2) << endl; cout << word.substr(3, 3) << endl; cout << word.substr(7, 6) << endl; return 0; }
We get three substrings of the initial string.
$ ./substring an old falcon
C++ string loop
We can use while and for loops to go over a string.
#include <iostream> using std::cout; using std::endl; using std::string; int main() { string msg = "an old falcon"; int i = 0; while (i < msg.size()) { cout << msg[i] << " "; i++; } cout << endl; for (const auto &c : msg) { cout << c << " "; } cout << endl; for (auto it = msg.begin(); it != msg.end(); it++) { cout << *it << " "; } cout << endl; for (string::size_type i = 0; i < msg.size(); i++) { std::cout << msg.at(i) << " "; } cout << endl; return 0; }
We loop over a string and print its characters. We use the classic while and for loops and the for-range loop.
$ ./looping a n o l d f a l c o n a n o l d f a l c o n a n o l d f a l c o n a n o l d f a l c o n
C++ string find/rfind
The find
searches the string for the first occurrence of the
specified string while the rfind
searches for the last occurrence.
#include <iostream> using std::string; using std::cout; using std::endl; int main() { string text = "I saw a red fox yesterday; a red old fox."; int pos1 = text.find("fox"); int pos2 = text.rfind("fox"); int pos3 = text.find("fox", 15); cout << pos1 << endl; cout << pos2 << endl; cout << pos3 << endl; return 0; }
We use the find
and rfind
methods to look for the
"fox" string. The methods return the indexes of the character positions.
int pos3 = text.find("fox", 15);
The overloaded find
method specifies the position where the search
starts.
$ ./finding 12 37 37
C++ read file
In the following example, we read a text file.
wind sky blue water falcon rock wood cup cloud war
We have a list of words in the file.
#include <iostream> #include <fstream> #include <string> using std::string; using std::cout; using std::cerr; using std::endl; using std::getline; using std::ifstream; int main() { ifstream filename("words.txt"); if (filename.is_open()) { string line; while (getline(filename, line)) { cout << line << endl; } filename.close(); } else { cerr << "Unable to open file"; } return 0; }
We read a file line by line and print each line to the console.
$ ./read_file wind sky blue water falcon rock wood cup cloud war
C++ string starts_with
The starts_with
method checks if the string starts with the given
prefix. The method was included in C++20.
#include <iostream> #include <fstream> using std::string; using std::cout; using std::cerr; using std::endl; using std::getline; using std::ifstream; int main() { ifstream filename("words.txt"); if (filename.is_open()) { string line; while (getline(filename, line)) { if (line.starts_with('w')) { cout << line << endl; } } filename.close(); } else { cerr << "Unable to open file"; } return 0; }
We read the words from the words.txt
file and print those that
start with 'w'.
$ ./starts_with wind water wood war
C++ string ends_with
The ends_with
method checks if the string ends with the given
suffix. The method was included in C++20.
#include <iostream> #include <sstream> using std::string; using std::cout; using std::endl; using std::getline; using std::istringstream; int main() { string words = "wind\nsky\blue\nwater\nfalcon\nrock\nwood\ncup\ncloud\nwar"; istringstream data(words); for (string line; getline(data, line);) { if (line.ends_with('d')) { cout << line << endl; } } return 0; }
We have a large string of words delimited by newline characters. We transform
the string to a stream and read the words with getline
. We print
those that end with 'd'.
$ ./ends_with wind wood cloud
In this article, we have worked with strings in C++.