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