FC2ブログ

[std::istringstream] 文字列 split (区切り文字 = 空白)

■ std::istringstream (区切り文字 = 空白) により文字列を分割可能
■ テンプレート化により、T=double,float,int/std::string 等に対応。
  ヘッダとソース分離の為、ヘッダ内にテンプレートの明示的実体化。

" split.h
======================================================
#include <string>
#include <sstream>
#include <vector>

#ifndef SPLIT_H_
#define SPLIT_H_

template <typename T>
std::vector<T> split (const std::string& string);

#endif /* SPLIT_H_ */
======================================================

" split.cpp
======================================================
#include "split.h"
template <typename T>
std::vector<T> split (const std::string& string)
{
std::istringstream iss(string);

std::vector<T> result;
T field;
while (iss >> field)
{
result.push_back(field);
}

return (result);
}
// テンプレート明示的実体化
template std::vector<double> split (const std::string& string);
template std::vector<std::string> split (const std::string& string);
======================================================

" main.cpp
======================================================
#include <iostream>
#include <string>
#include <vector>
#include "split.h"

int main (void)
{
const std::string sstr = "abc def ghi";
std::vector<std::string> VAS1D = split<std::string>(sstr);
for (auto & e : VAS1D)
{
std::cout << e << std::endl;
}

const std::string dstr = "12.3 45.6 78.9";
std::vector<double> VAD1D = split<double>(dstr);
for (auto & e : VAD1D)
{
std::cout << e << std::endl;
}

return (0);
}
======================================================


参考文献:

関連記事
スポンサーサイト



コメント

非公開コメント