■ヘッダ
#include <iostream>
#include <string>
#include <vector>
class TString
{
private:
std::string _str; // 文字列
std::vector<std::string> _splitItem; // 分解文字列
public:
TString( const char* pcData ); // コンストラクタ
~TString(); // デストラクタ
std::string GetString(); // 文字列取得
const char* GetCString(); // 文字列取得
int SetString( const char* pcData ); // 文字列設定
int AddString( const char* pcData ); // 文字列追加
void Clear(); // 文字列初期化
int GetSize(); // 文字列のサイズ取得
int Replace( const char* pcBefor,
const char* pcAfter ); // 文字列初期化
int Split( const char* pcDelim ); // 文字列の分解
std::string GetSplitItem( unsigned int nNum ); // 分解した文字列の要素数取得
};
■ソース
#include "TString.h"
/**************************************************/
// コンストラクタ
/**************************************************/
TString::TString( const char* pcData )
{
_str = pcData;
}
/**************************************************/
// デストラクタ
/**************************************************/
TString::~TString()
{
}
/**************************************************/
// 文字列を取得する(String型)
/**************************************************/
std::string TString::GetString()
{
return _str;
}
/**************************************************/
// 文字列を取得する(char型)
/**************************************************/
const char* TString::GetCString()
{
return _str.c_str();
}
/**************************************************/
// 文字列を設定する
/**************************************************/
int TString::SetString( const char* pcData )
{
_str = pcData;
return 0;
}
/**************************************************/
// 文字列を後ろに追加する
/**************************************************/
int TString::AddString( const char* pcData )
{
_str += pcData;
return 0;
}
/**************************************************/
// クリアする
/**************************************************/
void TString::Clear()
{
_str = "";
}
/**************************************************/
// 文字列のサイズを返却
/**************************************************/
int TString::GetSize()
{
return _str.size();
}
/**************************************************/
// Replaceする
/**************************************************/
int TString::Replace( const char* pcBefor, const char* pcAfter )
{
std::string strBefor( pcBefor );
std::string strAfter( pcAfter );
unsigned int nPoint = 0;
/* 一致する文字列を検索して位置を取得 */
while( std::string::npos != (nPoint = _str.find( strBefor, 0 ) ) )
{
/* 置き換え */
_str.replace( nPoint, strBefor.size(), strAfter );
}
return 0;
}
/**************************************************/
// Splitを行い、トークンの数を返却する
/**************************************************/
int TString::Split( const char* pcDelim )
{
std::string strDelim( pcDelim );
std::string strBuff = _str;
std::string strToken("");
unsigned int nPoint = 0;
/* デリミタがない場合 */
if( std::string::npos == strBuff.find(strDelim, 0) )
{
/* クリア */
_splitItem.clear();
/* 要素数を返却 */
return _splitItem.size();
}
/* デリミタを検索 */
while( std::string::npos != (nPoint = strBuff.find(strDelim, 0)) )
{
/* デリミタまでの文字列を設定 */
strToken = strBuff.substr( 0, nPoint );
/* Tokenが空となる場合は設定しない(デリミタが連続する場合はTokenが空となる) */
if( false == strToken.empty() )
{
/* デリミタまでの文字列を設定 */
_splitItem.push_back( strToken );
}
/* デリミタまでの文字を削除 */
strBuff.erase( 0, (nPoint + strDelim.size()) );
}
/* 文字列の最後にデリミタがある場合は空となるため設定しない */
if( false == strBuff.empty() )
{
/* 最後の要素を設定 */
_splitItem.push_back( strBuff );
}
/* 要素数を返却 */
return _splitItem.size();
}
/**************************************************/
// Splitしたトークンを返却する(指定要素)
/**************************************************/
std::string TString::GetSplitItem( unsigned int nNum )
{
std::string str = "";
/* トークン数より大きい値を指定された場合 */
if( nNum >= _splitItem.size() )
{
return str;
}
/* 指定トークンを設定 */
str = _splitItem[nNum];
return str;
}
最終更新:2014年07月21日 02:23