single.php

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

VC++でVBやC#のアセンブリで使える文字列を分解するSplit関数に似た操作をするためのコードを備忘録的に投稿。

Split関数

VBやC#で処理を書いている時に便利に使えるSplitメソッド(System.Stringアセンブリ)は、ファイルパスとかURLを分解して操作するのに便利なメソッドです。

“AAA¥BBB¥CCC” のような文字列を区切り文字 “¥” で[AAA] [BBB] [CCC]のように配列に入れることができます。

VC++でSplitのような操作

最近は新しい機能が追加されることが無くなったVC++ですが、WindowsネイティブDLLを作る時の存在感は健在です。

VBやC#のSplit関数をC++で利用したいと思った時に、CLRを利用すれば出来ますが、アンマネージコードである、MFCやC++のみだと自作するしかありません。

文字列をSplit関数的に操作するコードです。

#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に慣れてしまうと、細かな文字列操作を忘れてしまい気味ですが、昔は文字列分割だけでも大変だったのを思い出しました。(笑)

まとめ

VBやC#で便利に使えるSplit関数的な処理はVC++の標準ライブラリを使って作ることができます。

Split関数的な操作をすることで、URLやファイルパスなど、デリミタによって区切られている文字列を配列に入れるなどの操作が便利になります。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

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