Hello, and welcome! Are you ready to elevate your string manipulation skills in C++? Today, we'll delve into a task that bolsters your comprehension of strings and enhances your creativity. The task involves splitting a string into words and then reversing each word as if reflected in a mirror. Does that sound interesting? Let's get started!
You're tasked with considering a string filled with words and writing a C++ function that accepts this string. The function should reverse the character order of each word and form a new string consisting of these reversed words.
Here's what you need to keep in mind:
- The input string will contain between 1 and 100 words.
- Each word in the string is a sequence of characters separated by white space.
- The characters can range from
a
toz
,A
toZ
,0
to9
, or even an underscore_
. - The provided string will neither start nor end with a space, and double spaces won't be present either.
- After reversing the words, your program should output a single string with the reversed words preserving their original order.
Example
Consider the input string "Hello neat cpp_lovers_123"
.
The function works as follows:
- 'Hello' becomes 'olleH'
- 'neat' becomes 'taen'
- 'cpp_lovers_123' becomes '321_srevol_ppc'
Afterward, it forms a single string with these reversed words, producing "olleH taen 321_srevol_ppc"
.
Therefore, if you call reverseWords("Hello neat cpp_lovers_123")
, the function should return "olleH taen 321_srevol_ppc"
.
Let's begin breaking this down!
Our first task is to separate the words in the sentence. Unlike Python, C++ does not provide a built-in split()
function. However, we can employ the string stream available in C++. A stringstream
keeps a string internally, allowing us to extract words from the string. Here is a sample code to illustrate this:
C++1std::string input_str = "Hello neat cpp_lovers_123"; 2std::vector<std::string> words; 3 4std::istringstream iss(input_str); 5 6for(std::string s; iss >> s; ) 7 words.push_back(s); 8 9// Now the vector 'words' holds all the words of the string
Next, we need to reverse each word separated in the previous step. In C++, the std::reverse()
function, found in the <algorithm>
library, allows us to do this. Let's add these lines to our existing code:
C++1.... 2 3std::vector<std::string> reversed_words; 4 5for(auto word : words) 6{ 7 std::reverse(word.begin(), word.end()); 8 reversed_words.push_back(word); 9} 10 11// 'reversed_words' now contains the reversed words
Finally, we need to consolidate these reversed words into a single string, separated by spaces. We can achieve this using an ostringstream
from the C++ Standard Library. Here's how we do that:
C++1std::ostringstream oss; 2oss << reversed_words[0]; // add first word 3 4for (int i = 1; i < reversed_words.size(); i++) 5 oss << " " << reversed_words[i]; // add the remaining words with space
First, we push the first word to the stream, then push a space followed by the next word in a loop. This way, we add all words while preserving the format. To get the resulting string, we can call oss.str()
.
It remains for us to combine the code from the steps together in a function reverseWords
and call it from main
to test.
C++1#include <sstream> //for std::istringstream and std::ostringstream 2#include <algorithm> //for std::reverse 3#include <vector> //for std::vector 4#include <iostream> //for std::cout and std::endl 5 6std::string reverseWords(std::string input_str) 7{ 8 std::vector<std::string> words; 9 std::istringstream iss(input_str); 10 11 for(std::string s; iss >> s; ) 12 words.push_back(s); 13 14 std::vector<std::string> reversed_words; 15 16 for(auto &word : words) 17 { 18 std::reverse(word.begin(), word.end()); 19 reversed_words.push_back(word); 20 } 21 22 std::ostringstream oss; 23 oss << reversed_words[0]; // add first word 24 25 for (int i = 1; i < reversed_words.size(); i++) 26 oss << " " << reversed_words[i]; // add the remaining words with space 27 28 return oss.str(); 29} 30 31int main() { 32 // Call the function 33 std::cout << reverseWords("Hello neat cpp_lovers_123") << std::endl; // prints: 'olleH taen 321_srevol_ppc' 34 return 0; 35}
Well done! By completing this lesson, you've sharpened your proficiency in manipulating strings in C++. You've especially improved in reversing the order of characters in a word. I hope you're feeling confident and excited about your C++ skills. Remember, mastering these skills requires frequent practice. Therefore, take some time to explore related problems and practice what you’ve learned. Enjoy the journey of learning!