Remove spaces from std::string in C++

后端 未结 17 1658
说谎
说谎 2020-11-22 16:47

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?

17条回答
  •  北恋
    北恋 (楼主)
    2020-11-22 17:37

    The best thing to do is to use the algorithm 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;
    }
    

提交回复
热议问题