この記事は2018年12月09日に投稿しました。
目次
- 作者: ビャーネ・ストラウストラップ,Bjarne Stroustrup,柴田望洋
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2015/02/28
- メディア: 単行本
- この商品を含むブログ (11件) を見る
1. はじめに
こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているC/C++で文字列を分割する方法についてです。
2. C/C++で文字列を分割する
C/C++で文字列を分割するには、strtok_s関数を使用します。
書式
char *strtok_s( char *strToken, const char *strDelimit, char **context );
引数
strToken
分割対象の文字列
分割された部分はNULLに置き換えられます。
元の変数を変更したくない場合、別の変数にコピーしてコピーした変数を分割してください。
strDelimit
区切り文字列
context
strtok_sの呼び出しと呼び出しの間の位置情報の格納に使用
戻り値
strTokenで見つかった次のトークンへのポインターを返します。
これ以上トークンがない場合、NULLを返します。
実装例
#include <stdio.h> #include <stdlib.h> int main() { // 分割対象の文字列 char* strToken = "abcde,fghij:12345"; // 区切り文字列(複数指定可) // 今回","、":"で分割します。 char* strDelimit = ",:"; // strtok_sの内部で使用します。 char* context; // 対象の文字列(strToken)を区切り文字列(strDelimit)で分割します。 // 1つ目に分割された文字列(例ではabcde)が戻り値tokenに返されます。 char* token = strtok_s(strToken, strDelimit, &context); // 分割する文字列がなくなるまで繰り返します。 while (token) { print("%s\n", token); // 次に分割する場合、strtok_sの第1引数にNULLを指定します。 token = strtok_s(NULL, strDelimit, &context); } return 0; }
実行結果
abcde
fghij
12345
3. おわりに
C標準で文字列を分割する関数はstrtokになります。
Visual Studioの場合、strtok関数はコンパイルエラーになるため、strtok_s関数を使用します。
- 作者: 柴田望洋
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2017/12/16
- メディア: 単行本
- この商品を含むブログを見る
紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。
私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリやウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。
また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。
EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688