single.php

C++でVBやC#でおなじみのSplit関数的な操作を行う

最近はめっきり触れる必要の無くなったC++ですが、WindowsネイティブDLLを作る時の存在感は絶大です。最近のWindowsにはランタイムが入っていないので、共有DLL使用で作成しても再配布用のランタイムが必要になることが多いですが、そんなことを置いておいて…

VBやC#の文字列操作に使えるSplitメソッド(System.Stringアセンブリ)は、ファイルパスとかURLとか分解するのに便利なメソッドです。これをC++で利用したいと思った時に、CLRを利用すれば出来ますが、MFCやC++のみだと自作するしか無かったので備忘録。

#include <vector>
#include <string>
#include <sstream>
std::vector<std::string> split(const std::string &source, char delimiter)
{
    std::vector<std::string> vec;
    std::stringstream sstream(source);
    std::string buf;
    while( std::getline(sstream, buf, delimiter) ) {
        vec.push_back(buf);
    }
    return vec;
}

引数は分割する文字列と区切り(デリミタ)文字のみで、使い方は

CString source = "1,2,3,4,5";
std::vector<std::string> arr = split(source, ',');
CString a0 = arr[0].c_str(); // 1
CString a1 = arr[1].c_str(); // 2

CLRに慣れてしまうと、昔は文字列分割だけでも大変だったのを思い出しました。(笑)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です