template boy
template boy

Reputation: 10490

How to remove first word from a string?

I'm looking for the best way to remove the first word from a std::string. This is what I have but I feel that this is overcompilicating things. What's the best and shortest way to do this? Thanks.

#include <string>
#include <iostream>
#include <sstream>

int main()
{
    std::string str{"Where is everybody?"};
    std::string first;
    if (std::stringstream{str} >> first)
    {
        str.erase(str.begin(), str.begin() + first.size());
    }
    std::cout << str; // " is everybody?"
}

Upvotes: 3

Views: 4898

Answers (4)

aaronman
aaronman

Reputation: 18771

Here is a solution using c++11's regex

#include <iostream>
#include <string>
#include <regex>
#include <iterator>

int main ()
{
  std::string s ("there is a subsequence in the string\n");
  std::regex e ("(\\s*)(\\w*)(.*)");
  std::cout << std::regex_replace (s,e,"$1$3");

  return 0;
}

Upvotes: 4

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 727077

You can do it without a stream: skip the initial spaces, locate the first space after that, walk to the next non-space, and use substr to get the rest of the string:

int i = 0;
while (isblank(str[i])) i++;
while (!isblank(str[i])) i++;
while (isblank(str[i])) i++;
str = str.substr(i);

Here is a demo on ideone.

Upvotes: 6

Andrey Tuganov
Andrey Tuganov

Reputation: 361

You could try using string::substr() and string::find_first_of().

Upvotes: 1

sehe
sehe

Reputation: 393944

minor tweak, that leverages IO streams for the second half too :)

#include <string>
#include <iostream>
#include <sstream>

int main()
{
    std::string str{"Where is everybody?"};

    std::string first;
    std::istringstream iss{str};
    iss >> first;

    std::ostringstream oss;
    oss << iss.rdbuf();

    std::cout << oss.str(); // " is everybody?"
}

Upvotes: 8

Related Questions