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

C で文字列トークンを効率的に解析するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-14 11:28:02
オリジナル
1049 人が閲覧しました

How Can I Efficiently Parse String Tokens in C  ?

C での文字列トークンの効率的な解析

文字列を特定の区切り文字で区切られたトークンに効果的に分割するために、C は堅牢なメカニズムを提供します。たとえば、文字列がセミコロン (;) で区切られた単語で構成されている場合、次の戦略を採用できます:

std::getline() を使用する

std ::getline() 関数は、シンプルでありながら多用途なアプローチを提供します。あらゆるタイプの区切り文字を処理できるため、行とトークンの両方の抽出に適しています。以下に例を示します。

#include <sstream>
#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<string> strings;
    istringstream f("denmark;sweden;india;us");
    string s;    
    while (getline(f, s, ';')) {
        cout << s << endl;
        strings.push_back(s);
    }
}
ログイン後にコピー

このコードは文字列とベクトルを初期化します。次に、getline() を使用して文字列を反復処理し、セミコロンごとに文字列を分割します。各トークンが出力され、ベクターに追加されます。

カスタム分割関数

または、トークン化を処理するカスタム関数を作成できます:

#include <string>
#include <vector>

using namespace std;

vector<string> split(const string& str, char delimiter) {
    vector<string> tokens;
    string token;
    istringstream iss(str);
    while (getline(iss, token, delimiter)) {
        tokens.push_back(token);
    }
    return tokens;
}
ログイン後にコピー

この関数は文字列と区切り文字を入力として受け取り、トークンのベクトルを返します。 getline() と同様に動作しますが、任意の区切り文字を使用できる柔軟性を備えています。

その他の考慮事項

文字列を扱う場合、セキュリティ ガイドラインに従うことが重要です。 C スタイルの文字列関数や Boost などのオープンソース ライブラリは、セキュリティに影響を与える可能性があります。したがって、std::getline() などの標準 C 関数に依存するか、カスタム分割ロジックを実装することをお勧めします。

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

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