1. ホーム
  2. c++

[解決済み】C++でstd::stringからスペースを取り除く

2022-04-02 05:25:23

質問

C++で文字列からスペースを取り除くには、どのような方法が好ましいですか?すべての文字をループして新しい文字列を作ることもできますが、もっと良い方法があるのでしょうか?

どのように解決するのですか?

一番良いのは、アルゴリズムを使うことです。 remove_if とispaceを使用します。

remove_if(str.begin(), str.end(), isspace);

このアルゴリズム自体はコンテナを変更できないので(値の変更のみ)、実際には値をシャッフルして、現在の終端がどこにあるべきかのポインタを返します。したがって、コンテナの長さを実際に変更するには、string::eraseを呼び出す必要があります。

str.erase(remove_if(str.begin(), str.end(), isspace), str.end());

また、remove_ifは最大で1つのデータコピーを作成することに注意する必要があります。以下は実装例です。

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;
}