ホームページ >バックエンド開発 >C++ >C++ で strtok() 関数を実装する

C++ で strtok() 関数を実装する

WBOY
WBOY転載
2023-09-01 19:21:041567ブラウズ

C++ で strtok() 関数を実装する

strtok() 関数は、C で最もよく使用される関数の 1 つです。この関数は、区切り文字をガイドとして使用して、テキストをより小さなチャンクまたはトークンに分割できます。 strtok() 関数のおかげで、C での文字列の操作は簡単です。この記事では、strtok() 関数について、その定義、構文、アルゴリズム、さまざまな実装戦略を含めて詳しく説明します。留意すべき点は、strtok 関数にはいくつかの制限と潜在的な欠点があるということです。たとえば、元の文字列を直接変更するため、const 文字列や読み取り専用文字列では使用できません。シーケンス内で繰り返される空の文字列や区切り文字などのエッジ ケースや予期しない入力も処理が難しい場合があります。

これらの欠点にもかかわらず、この関数は多くのプログラマーにとって有用なツールであり、テキスト処理、データ解析、ネットワーク プロトコルなどのさまざまなアプリケーションでよく使用されます。これは、多くの一般的なプログラミング タスクを大幅に簡素化できる、柔軟で強力な機能です。

strtok()関数の特徴

文字列を区切り文字に基づいて小さなチャンクまたはトークンに分割するには、C の strtok() 関数を使用します。トークン化する必要がある文字列へのポインタと区切り文字を含む文字列が、この関数の 2 つの入力となります。文字列の最初のトークンへのポインタが関数によって返されます。文字列にトークンが残っている限り、同じ文字列パラメータを使用して関数を連続して呼び出すと、追加のトークンが返されます。これは、次の NULL ポインタを使用して行われます。 while ループ。'strtok()' 関数を再度呼び出す場合、最初の引数として NULL を指定すると、同じ文字列の以前のトークン化で中断したところから再開するよう関数に指示されます。

入力文字列を最初の引数として関数 'strtok()' が最初に呼び出されるとき、最初の文字列内の最初のトークンの検索が開始され、最初のトークンが見つかったら、次のトークンを置き換えて終了します。その後に null 文字 (''0'') が続く区切り文字。最初の引数として NULL ポインターを指定して 'strtok()' を再度使用すると、関数は前回の文字列のトークン化で中断したところから再開します。 、つまり、前のトークンの直後です。区切り文字の次の出現を探し続けます。 ###文法### リーリー ###どこ###

- `str` は、トークン化される文字列へのポインタです。

- `delimiters` は区切り文字を含む文字列です。

###アルゴリズム###

ステップ 1

- `strtok()` 関数は 2 つの引数を取ります。最初の引数はトークン化する入力文字列で、2 番目の引数はトークン化する必要があるすべての区切り文字を含む文字列です。入力文字列をトークンに分割するために使用されます。

ステップ 2

-関数が初めて呼び出されるとき、入力文字列が最初の引数として渡され、区切り文字文字列が 2 番目の引数として渡されます。
  • ##ステップ 3 -この関数は、入力文字列内で最初に出現する区切り文字を検索します。

  • ステップ 4 -区切り文字が見つかると、それをヌル終端文字 (`'\0'`) に置き換え、先頭へのポインターを返します最初のトークンの。

  • ステップ 5 - 次回関数が呼び出されるとき、最初の引数は元の入力文字列ではなく `NULL` に設定される必要があります。これにより、関数は中断したところから続行し、文字列内の次のトークンを検索するように指示されます。

  • ステップ 6 -関数は区切り文字の検索を続け、文字列の末尾に到達するまで後続のトークンの先頭へのポインターを返し、文字列の末尾に到達した時点で「NULL」を返します。

  • 従うべきアプローチ

    方法 1

    -ループと strtok() 関数および単一の区切り文字を使用してコードを表示するプログラム。
  • 方法 2 - ループと strtok() 関数および複数の区切り文字を使用してコードを表示するプログラム

    方法 1
以下は、strtok() 関数と 1 つの区切り記号を使用したループを使用するコードを示すプログラムです。

この例では、strtok を使用して文字列をスペースで分割する方法を示します。入力文字列 str は、まず区切り文字 " " とともに strtok に渡されます。 strtok への最初の呼び出しは、最初のトークン (「Hi,」) へのポインターを返し、コンソールに出力されます。 strtok は、トークンがなくなり、各トークンがコンソールに出力されるまで、文字列のトークン化を続けます。後続の strtok の呼び出しでは、最初のパラメータとして null ポインタを渡し、元の文字列のトークン化を継続することを示すことに注意してください。

例 1 リーリー ###出力### リーリー 方法 2

以下は、ループと strtok() 関数を使用して、複数の区切り文字を含むコードを表示するプログラムです。以下はそのプログラムコードです。

The '|' and'' (space) delimiters are used to tokenize the string "The boy|is|standing|with his pet|lazy dog." in this example. Once with the string as the first argument and the characters '|' and'' as the second argument, the strtok() method is called twice. Following calls return the remaining tokens, the initial call returns the first token, "The." Until all tokens have been extracted, the loop keeps running.

Example-2

#include <iostream> 
#include <cstring> 
 
int main() { 
   char str[] = "The boy|is|standing|with his pet|lazy dog."; 
   char* token = strtok(str, "| "); 
   while (token != NULL) { 
      std::cout << token << std::endl; 
      token = strtok(NULL, "| "); 
   } 
   return 0; 
} 

Output

The 
boy 
is 
standing 
with 
his 
pet 
lazy 
dog.

结论

总之,C++的strtok函数是一个有用且有效的用于操作字符串的工具。尽管它有一些重要的限制和潜在的缺点,但它仍然是解析和处理文本数据的常见选择,并且对于任何编码人员来说都是一个有用的工具。

以上がC++ で strtok() 関数を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。