This tutorial will go through how to iterate over the words of a string consisting of multiple words.
Table of contents
Iterate Over Words using istringstream
The simplest way to iterate over words is to use the istringstream class. If the words in a string are separated by whitespace, we can fetch each word from the istringstream
object as follows:
#include <iostream> #include <sstream> #include <string> using namespace std; int main() { string str = "C++ is really fun to learn!"; istringstream iss(str); do { string word; iss >> word; cout << word << endl; } while (iss); return 0; }
You can test your code by visiting our free C++ code compiler.
Let’s run the code to get the result:
C++ is really fun to learn!
Iterate Over Words using for-loop
We can iterate over the words in a string using iteratively. The steps of this approach are as follows:
#include <iostream> #include <string> // Split provided string to words and print to console void splitWord(std::string str) { // Create an empty string std::string word; // Iterate over the string character by character with for loop for (int i = 0; i < str.length(); i++) { // Check if character at current iteration is equal to ' ' or // is the last character if (str[i] == ' ' or i == (str.length() - 1)) { // If whitespace or the last character print the string including current character std::cout << word + str[i] << std::endl; word = ""; } // Add current character to string else { word += str[i]; } } } int main() { // Given string std::string str = "C++ is really fun to learn!"; splitWord(str); return 0; }
Let’s run the code to see the result:
C++ is really fun to learn!
Iterate Over Words using strtok
Using the provided separators, we can also use the strtok method to split a string into words. Let’s look at an example using strtok
:
#include <cstdio> #include <cstring> int main () { // Define a character array char str[] ="C++ is really fun to learn!"; // Character pointer char * pch; printf ("Splitting string \"%s\" into tokens:\n",str); // Return pointers to the first token pch = strtok (str," ,.-"); // Check for delimiter while (pch != nullptr) { // Use strtok to go through other tokens printf ("%s\n",pch); pch = strtok (nullptr, " ,.-"); } return 0; }
C++ is really fun to learn!
Iterate Over Words using Boost Library
We can also use the boost::split method from the Boost library. The split method functions similarly to strtok
, where an input sequence is split into tokens given a specific separator. Let’s look at how to implement the split method with an example,
#include <iostream> #include <string> #include <boost/algorithm/string.hpp> int main() { // Define an input string std::string input= "C++ is really fun to learn!"; // Define a container to hold copies of references to the substrings std::vector<std::string> result; // Split based on tab or white space boost::split(result, input, boost::is_any_of("\t ")); // Iterate over vector using for loop int n = result.size(); for (int i = 0; i<n; i++) // Print words to console std::cout << result[i] << std::endl; return 0; }
Let’s run the code to see the result:
C++ is really fun to learn!
Summary
Congratulations on reading to the end of this tutorial!
For further reading on C++, go to the articles:
- How to Reverse a String in C++
- How to Sort a Vector in C++
- How to Sum the Elements of a Vector in C++
Have fun and happy researching!
Suf is a senior advisor in data science with deep expertise in Natural Language Processing, Complex Networks, and Anomaly Detection. Formerly a postdoctoral research fellow, he applied advanced physics techniques to tackle real-world, data-heavy industry challenges. Before that, he was a particle physicist at the ATLAS Experiment of the Large Hadron Collider. Now, he’s focused on bringing more fun and curiosity to the world of science and research online.