2015年7月28日火曜日

[cocos2dx] で文字列をデリミタで分解しリスト化する関数を作る【split】


文字列のデリミタ分解する関数を用意した理由

文字列を分解して作業したい場合があります。
分解した文字列はリスト化して便利に取り出して利用することができます。

私の場合、設定値を文字列にしたものをロードしたり、csv分解したりするのに利用しました。

今回はそんな文字列をデリミタで分解しリスト化する関数です。



実際の関数

はじめに。
この関数は以下の記事の関数を利用しています。
cocos2dでトリミング関数を作る【trim】


使い方


こんな感じで使います。
std::string result = split("I;My;Me;Mine", ";");
//result は "I","My","Me","Mine" のリストが返却されます。

簡単な説明

while( (cutAt = str.find_first_of(delim)) != str.npos ) {
デリミタ文字を検索し、ループします。

if(cutAt > 0) {
    result.push_back(trim(str.substr(0, cutAt)));
}
デリミタ文字までの文字列を結果リストに追加します。

str = str.substr(cutAt + 1);
次の準備のために、追加した文字列分は切り落とします。

if(str.length() > 0) {
    result.push_back(trim(str));
}
上記ループでは最後が追加されないので、残りの文字列を結果リストに追加します。



このプログラムが皆様のお役に立てば幸いです。

ではまた。

0 件のコメント:

コメントを投稿