アットウィキロゴ

Stringクラス

■ヘッダ

#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