patterncppCritical
Remove spaces from std::string in C++
Viewed 0 times
fromstdremovespacesstring
Problem
What is the preferred way to remove spaces from a string in C++? I could loop through all the characters and build a new string, but is there a better way?
Solution
The best thing to do is to use the algorithm
Now the algorithm itself can't change the container(only modify the values), so it actually shuffles the values around and returns a pointer to where the end now should be. So we have to call string::erase to actually modify the length of the container:
We should also note that remove_if will make at most one copy of the data. Here is a sample implementation:
remove_if and isspace:remove_if(str.begin(), str.end(), isspace);Now the algorithm itself can't change the container(only modify the values), so it actually shuffles the values around and returns a pointer to where the end now should be. So we have to call string::erase to actually modify the length of the container:
str.erase(remove_if(str.begin(), str.end(), isspace), str.end());We should also note that remove_if will make at most one copy of the data. Here is a sample implementation:
template
T remove_if(T beg, T end, P pred)
{
T dest = beg;
for (T itr = beg;itr != end; ++itr)
if (!pred(*itr))
*(dest++) = *itr;
return dest;
}Code Snippets
remove_if(str.begin(), str.end(), isspace);str.erase(remove_if(str.begin(), str.end(), isspace), str.end());template<typename T, typename P>
T remove_if(T beg, T end, P pred)
{
T dest = beg;
for (T itr = beg;itr != end; ++itr)
if (!pred(*itr))
*(dest++) = *itr;
return dest;
}Context
Stack Overflow Q#83439, score: 316
Revisions (0)
No revisions yet.