Splitting and Rejoining Words in a String with C++

Introduction

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!

Task Statement and Description

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 to z, A to Z, 0 to 9, 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!

Step-by-Step Solution Building: Step 1

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++
std::string input_str = "Hello neat cpp_lovers_123";
std::vector<std::string> words;

std::istringstream iss(input_str);

for(std::string s; iss >> s; )
    words.push_back(s);

// Now the vector 'words' holds all the words of the string

Step-by-Step Solution Building: Step 2

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++
....

std::vector<std::string> reversed_words;

for(auto word : words)
{
    std::reverse(word.begin(), word.end());
    reversed_words.push_back(word);
}

// 'reversed_words' now contains the reversed words
Sign up

Join the 1M+ learners on CodeSignal

Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal