ホームページ >バックエンド開発 >C++ >文字列内の単語を効率的かつエレガントに反復するにはどうすればよいですか?

文字列内の単語を効率的かつエレガントに反復するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-24 22:31:16995ブラウズ

How Can I Efficiently and Elegantly Iterate Over Words in a String?

文字列の反復: 優雅さと効率の両立

文字列の個々の単語の反復 (特に空白で区切られている場合) は、一般的なプログラミングです。タスク。さまざまなアプローチが存在しますが、洗練された効率的なソリューションを見つけるのは難しい場合があります。

StringStream を使用した現在のメソッド

提供されている例では stringstream を利用していますが、OP はさらに多くの方法を求めています。エレガントなソリューション。このメソッドは確かに堅牢ですが、一部の文字操作が必要であり、期待されるほど簡潔ではありません。

エレガントな解決策: 文字列の分割

エレガントさと効率性の両方を達成するには、 C の Split() 関数を利用できます。この関数は文字列と区切り文字を入力として受け取り、分割された単語を含むベクトルを返します。

#include <vector>
#include <string>

template <typename Out>
void split(const std::string &s, char delim, Out result) {
    std::istringstream iss(s);
    std::string item;
    while (std::getline(iss, item, delim)) {
        *result++ = item;
    }
}

std::vector<std::string> split(const std::string &s, char delim) {
    std::vector<std::string> elems;
    split(s, delim, std::back_inserter(elems));
    return elems;
}

このソリューションは最小限のコードで済み、理解しやすいです。これは単に文字列を stringstream に読み取り、getline() 関数を使用して、指定された区切り文字を使用して個々の単語を抽出します。分割された文字列は、その後の処理のためにベクトルに保存できます。

ただし、このソリューションでは空のトークンがスキップされないことに注意してください。空の文字列を削除する必要がある場合は、ベクトルをさらに後処理できます。

以上が文字列内の単語を効率的かつエレガントに反復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。