How do I remove the first word from a string?

Let's say I have

string sentence{"Hello how are you."}


And I want the string sentence to have "like you" without "Hello". How would I do it.

I tried to do something like:

stringstream ss(sentence);
ss>> string junkWord;//to get rid of first word


But when I did this:

cout<<sentence;//still prints out "Hello how are you"


Pretty obvious that stringstream

doesn't change the actual string. I also tried to use strtok

but string

it doesn't work with.


source to share

8 answers

str=str.substr(str.find_first_of(" \t")+1);



string sentence="Hello how are you.";
sentence=sentence.substr(sentence.find_first_of(" \t")+1);



> ./a.out
Before:Hello how are you.
After:how are you.


It is assumed that the line does not start with white space. In that case, it won't work.

find_first_of("<list of characters>").


the list of symbols in our case is a space and a tab. This will search for the first padding of any of the characters and returns an iterator. After that, adding +1 moves the position one character at a time. The position then points to the second word of the line. Substr(pos)

will extract the substring starting from position up to the last character of the string.



Try to run

#include <iostream>
#include <string>

int main() 
    std::string sentence{"Hello how are you."};

    std::string::size_type n = 0;
    n = sentence.find_first_not_of( " \t", n );
    n = sentence.find_first_of( " \t", n );
    sentence.erase( 0,  sentence.find_first_not_of( " \t", n ) );

    std::cout << '\"' << sentence << "\"\n";

    return 0;


Output signal

"how are you."




There are many ways to do this. I guess I would go with this:

#include <iostream>
#include <string>

int main() {
    std::string sentence{"Hello how are you."};

    // First, find the index for the first space:
    auto first_space = sentence.find(' ');

    // The part of the string we want to keep
    // starts at the index after the space:
    auto second_word = first_space + 1;

    // If you want to write it out directly, write the part of the string
    // that starts at the second word and lasts until the end of the string:
    std::cout.write( + second_word, sentence.length() - second_word);
    std::cout << std::endl;

    // Or, if you want a string object, make a copy from the start of the
    // second word. substr copies until the end of the string when you give
    // it only one argument, like here:
    std::string rest{sentence.substr(second_word)};
    std::cout << rest << std::endl;


Of course, unless you have a really good reason, you should check what first_space != std::string::npos

, which would mean the location was not found. For clarity, my sample code does not include validation :)



You can use string::find()

to find the first space. Once you have your index, then get the substring c string::substr()

from the index after the index space to the end of the string.



You can, for example, take the remaining substring

string sentence{"Hello how are you."};
stringstream ss{sentence};
string junkWord;
ss >> junkWord;
cout<<sentence.substr(junkWord.length()+1); //string::substr


However, it also depends on what you want to do next.



One liner:

std::string subStr = sentence.substr(sentence.find_first_not_of(" \t\r\n", sentence.find_first_of(" \t\r\n", sentence.find_first_not_of(" \t\r\n"))));


working example:

#include <iostream>
#include <string>

void main()
    std::string sentence{ "Hello how are you." };

    char whiteSpaces[] = " \t\r\n";

    std::string subStr = sentence.substr(sentence.find_first_not_of(whiteSpaces, sentence.find_first_of(whiteSpaces, sentence.find_first_not_of(whiteSpaces))));

    std::cout << subStr;





Here's how to use stringstream

to extract the junkword, ignoring any space before or after (using std::ws

), then get the rest of the sentence with robust error handling ....

std::string sentence{"Hello how are you."};
std::stringstream ss{sentence};
std::string junkWord;
if (ss >> junkWord >> std::ws && std::getline(ss, sentence, '\0'))
    std::cout << sentence << '\n';
    std::cerr << "the sentence didn't contain ANY words at all\n";


See how it works on ideone here ....



#include <iostream>  // cout
#include <string>   // string
#include <sstream> // string stream
using namespace std;

int main()
     string testString = "Hello how are you.";

     istringstream iss(testString); // note istringstream NOT sstringstream

     char c; // this will read the delima (space in this case)
     string firstWord;

     iss>>firstWord>>c; // read the first word and end after the first ' '

    cout << "The first word in \"" << testString << "\" is \"" << firstWord << "\""<<endl;

    cout << "The rest of the words is \"" <<testString.substr(firstWord.length()+1) << "\""<<endl;
    return 0;



The first word in "Hello how are you." is "Hello"
The rest of the words is "how are you."

live testing on ideon



All Articles