ホームページ > バックエンド開発 > C++ > C 文字列から空白を効率的に削除するにはどうすればよいですか?

C 文字列から空白を効率的に削除するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-17 20:07:15
オリジナル
559 人が閲覧しました

How Can I Efficiently Remove Whitespace from C   Strings?

C 文字列からの空白の削除

C では、文字列から空白を削除するのが一般的なタスクになることがあります。単純なアプローチでは、文字を反復処理し、新しい文字列を手動で構築する必要があります。ただし、より効率的な解決策があります。

アルゴリズム

C STL は、この目的に使用できる、remove_if と呼ばれる強力なアルゴリズムを提供します。このアルゴリズムは、要素を削除する必要があるかどうかを決定する述語関数を受け取り、そのような要素をすべてコンテナから削除します。

この場合、対象となる述語関数は isspace で、空白に対して true を返します。文字、それ以外の場合は false。 isspace述語を使用して文字列にremove_ifを適用すると、すべての空白文字を削除できます。

実装

remove_ifを使用して空白文字を削除したら、次のことを行う必要があります。文字列を新しいサイズに縮小します。これは消去方法を使用して実現できます。このアプローチの完全な実装は次のとおりです。

#include <algorithm>
#include <string>

void remove_spaces(std::string& str)
{
    str.erase(std::remove_if(str.begin(), str.end(), std::isspace), str.end());
}
ログイン後にコピー

remove_if のカスタム実装

STL の Remove_if アルゴリズムは、コンテナに適用できる汎用関数です。文字列を超えて。ただし、このような特定の使用例の場合は、文字列に合わせたカスタム バージョンを実装する方が便利な場合があります。

template <typename T>
T remove_if(T beg, T end, std::function<bool(char)> pred)
{
    T dest = beg;
    for (T itr = beg; itr != end; ++itr)
    {
        if (!pred(*itr))
        {
            *(dest++) = *itr;
        }
    }
    return dest;
}
ログイン後にコピー

このカスタム実装は、STL Remove_if アルゴリズムの動作を模倣しており、使用できます。特に std::string.

のような文字ベースのコンテナーの場合

以上がC 文字列から空白を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート