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 サイトの他の関連記事を参照してください。