Reputation: 10490
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
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
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
Reputation: 361
You could try using string::substr() and string::find_first_of().
Upvotes: 1
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