ここ アイコン CIkoStr のヘルプ   
☆更新日 : ----/--/-- 



CIkoStr のヘルプ目次


☆CIkoStr の概要
☆_beginthreadex での注意点
☆CIkoStr を使う
☆= 演算子 (代入)
☆+ 演算子 (連結)
☆+= 演算子 (連結代入)
☆比較演算子
└== != < > <= >=
☆引数 LPCTSTR
☆引数 LPTSTR
☆operator[]
☆GetAt
☆SetAt
☆GetLen
└GetLength
☆GetStrCount
☆Insert
☆InsertMB
☆InsertR
☆InsertRMB
Cut
☆Trim
☆TrimL
└TrimLeft
☆TrimR
└TrimRight
☆Mid
☆Left
☆Right
☆MidMB
☆LeftMB
☆RightMB
☆Compare
☆CompareNC
└CompareNoCase
☆Find
☆FindMB
☆FindNC
☆FindNCMB
☆RFind
└ReverseFind
☆RFindMB
☆Format
☆NumToStr
☆NumToStr64
☆StrToNum
☆StrToNum64
☆NumToStrVer
☆InsertComma
☆Enclose
☆HanToZen
☆ZenToHan
☆ExpandEnvStr
☆PermStr
└Replace
☆PermStrMB
☆InStrCount
☆Clear
└Empty
☆Delete
☆IsEmpty
☆MakeUpper
☆MakeLower
☆c
☆t
GetWndText
└GetWindowText
SetWndText
└SetWindowText
FormatByteSize64
☆LoadStr
☆GetCrUserName
☆LoadTextFile
☆SaveTextFile
☆Attach
☆Detach
☆GetBuff
☆GetBuffSize
☆ResetLen
☆SetBuffSize

おまけ
☆iTRACE マクロ
☆iASSERT マクロ
☆iVERIFY マクロ

☆バージョンアップ履歴




概要

◆「CIkoStr」とは、C++ 言語で文字列を文字列として扱うことのできる、MFC CString のようなかんたん文字列クラスです。
以下のように使うことができます。
CIkoStr isStr;
CIkoStr isStr2;
isStr = _T("文字列を文字列として代入");
isStr2 = _T("CIkoStr は") + isStr + _T("できます。");
SetWindowText( hWnd, isStr2 );
isStr = _T("サイズも文字列によって自動的に変わります。");
// 等々

◆ユニコードと、MBCS を考慮した ANSI に対応しています。
プログラムのターゲット (#define _UNICODE の有無) によって以下のように内部で扱う型が変わり、TCHAR 型としてそのまま使えます。
・ユニコード (#define _UNICODE あり): wchar_t
・ANSI (#define _UNICODE なし): char
・両対応: TCHAR

◆CIkoStr の作成時と、=、+、+= による代入時に、現在の型とは違う型 (wchar_t、char) を渡すと、現在の型に変換されて格納されます。
// プログラムはユニコード (#define _UNICODE 有)
CIkoStr isStr;	// CIkoStr もユニコードを扱う型として作成される
isStr = L"これはユニコード文字";
char scStr[] = "これは ANSI 文字";
isStr = scStr;
// char 型の scStr がユニコード文字に変換されて isStr に格納される





_beginthreadex での注意点

CIkoStr を _beginthreadex で起動したスレッド内で作成して使う場合、少し注意が必要です。
MSDN より:
_endthread と _endthreadex によって、C++ デストラクタはスレッドで保留状態になり、呼び出されません。
とあるように、そのままでは CIkoStr のデストラクタが呼び出されず、メモリリークを起こします。
これを回避するには、_endthreadex を呼び出す前に、CIkoStr の Delete() メンバ関数を呼び出してください。
これにより該当 CIkoStr は削除され、メモリリークは起こらなくなります。





CIkoStr を使う

◆インクルードについて。
Visual C++ の場合は以下のファイルをプロジェクトに取り込んでください。
IkoDef.h
IkoStr.h
IkoStr.cpp

そして IkoDef.h、IkoStr.h をインクルードする前に tchar.h、mbstring.h、wchar.h、stdarg.h 等文字列を扱うためのそれっぽいファイルをインクルードしてください。(ユニコード/ANSI で必要なものが若干変わります。)

※Visual C++ でプリコンパイル済みヘッダーを使用しない場合は、IkoStr.cpp の冒頭にある #include "stdafx.h" をコメントアウトしてください。

◆CIkoStr の作り方。
// 空の CIkoStr を作成
CIkoStr isStr;

// 文字列を指定した CIkoStr を作成
CIkoStr isStr( LPCTSTR );
例:
CIkoStr isStr( _T("ちっちゃいものクラブ") );
CIkoStr isStr = _T("ちっちゃいものパラダイス");

// NULL 文字を含まない単一文字で CIkoStr を作成 (NULL は付加されます)
CIkoStr isStr( TCHAR );
例:
CIkoStr isStr( _T('a') );
CIkoStr isStr = _T('x');

// バッファサイズ (配列要素数) を指定して CIkoStr を作成
CIkoStr isStr( int );
例:
CIkoStr isStr( 256 ); // = TCHAR sStr[256];

後は後述の関数や演算子で文字列を代入したり連結したり好きにできます。




= 演算子による代入

CIkoStr は = 演算子により文字列をそのまま代入できます。
CIkoStr isStr;
isStr = _T("クリスマスプレゼントに妹をおねだり");




+ 演算子による連結

CIkoStr は + 演算子により文字列と文字列を連結できます。
CIkoStr isStr1( _T("妹を") );
CIkoStr isStr2( _T("メイドさんにする方法") );
CIkoStr isStr3;
isStr3 = isStr1 + isStr2; // isStr3 = "妹をメイドさんにする方法"




+= 演算子による連結代入

CIkoStr は += 演算子により文字列と文字列を連結 (追加) 代入できます。
CIkoStr isStr1( _T("弟を") );
CIkoStr isStr2( _T("メイドさんにする方法") );
isStr1 += isStr2; // isStr1 = "弟をメイドさんにする方法"




比較演算子

CIkoStr は以下の比較演算子が使用可能です。
==左右の文字列が等しいか比較します。
等しいと 0 以外 (TRUE) になります。
!=左右の文字列が等しくないか比較します。
等しくないと 0 以外 (TRUE) になります。
<左右の文字列の大きさ (辞書順) を比較します。
右が大きいと 0 以外 (TRUE) になります。
>左右の文字列の大きさ (辞書順) を比較します。
左が大きいと 0 以外 (TRUE) になります。
<=左右の文字列の大きさ (辞書順) を比較します。
右が大きいか、左右同じだと 0 以外 (TRUE) になります。
>=左右の文字列の大きさ (辞書順) を比較します。
左が大きいか、左右同じだと 0 以外 (TRUE) になります。




引数 LPCTSTR

CIkoStr は様々な関数の引数 LPCTSTR に直接渡すことができます。
CIkoStr isStr( _T("カレーうどんタイマー") );
SetWindowText( hWnd, isStr ); // hWnd のタイトルが "カレーうどんタイマー" に。

ただし、printf のような可変引数に CIkoStr を渡す場合は、.t() を付けるか、明示的に LPCTSTR へキャストする必要があります。
詳しくは .t() を参照してください。




引数 LPTSTR

CIkoStr は様々な関数の引数 LPTSTR に GetBuff() メンバ関数を使うことで直接渡すことができます。
CIkoStr isStr( 100 ); // = TCHAR sStr[100];
GetWindowText( hWnd, isStr.GetBuff(), 100 );
isStr.ResetLen(); // GetBuff() で中身を書き換えたら必ず ResetLen() を呼び出す


※CIkoStr を LPTSTR として渡す時は、必ずバッファサイズを正しく分かっている状態で使用し、その後他のメンバ関数を使う前に ResetLen() を呼び出してください。





operator[]

TCHAR operator[]( int nIndex ) const;

★解説
配列指定で 1 文字取り出します。(NULL は含まないので取り扱い注意!)

★引数
nIndex0 からの位置を指定します。

★戻り値
NULL を含まない TCHAR 1 文字を返します。

★使用例
CIkoStr isStr( _T("abcdefg") );
TCHAR chStr = isStr[1];
// 結果: chStr = 'b'
注: ANSI では仕様上 2 バイト文字を取り出すことはできません。




GetAt

TCHAR GetAt( int nIndex ) const;

★解説
配列指定で 1 文字取り出します。(NULL は含まないので取り扱い注意!)

★引数
nIndex0 からの位置を指定します。

★戻り値
NULL を含まない TCHAR 1 文字を返します。

★使用例
CIkoStr isStr( _T("abcdefg") );
TCHAR chStr = isStr.GetAt( 1 );
// 結果: chStr = 'b'
注: ANSI では仕様上 GetAt() で 2 バイト文字を取り出すことはできません。




SetAt

void SetAt( int nIndex, LPCTSTR pStr );
void SetAt( int nIndex, TCHAR chStr );

★解説
現在の文字列中の 1 文字を設定します。

★引数
pStr1 文字を指定します。
chStrNULL を含まない 1 文字を指定します。

★戻り値
この関数に戻り値はありません。

★使用例
CIkoStr isStr( _T("abcdefg") );
isStr.SetAt( 1, 'B' );
// 結果: isStr = "aBcdefg"
注: ANSI では仕様上 SetAt() で 2 バイト文字を設定することはできません。




GetLen

int GetLen() const;
int GetLength() const;

★解説
文字列の長さを調べます。(NULL は数えません)
ANSI での 2 バイト文字は 2 文字として数えます。

★戻り値
文字列の長さを返します。

★使用例
CIkoStr isStr( _T("ぷにゃー") );
int nLen = isStr.GetLen();
// 結果:
ユニコード: nLen = 4
ANSI: nLen = 8




GetStrCount

int GetStrCount() const;

★解説
文字数を調べます。(NULL は数えません)
ANSI での 2 バイト文字は 1 文字として数えます。

★戻り値
文字列の文字数を返します。

★使用例
CIkoStr isStr( _T("いちごショートケーキ") );
int nLen = isStr.GetStrCount();
// 結果: nLen = 10




Insert

BOOL Insert( int nFirst, LPCTSTR pStr );

★解説
現在の文字列に別の文字列を挿入します。
ANSI での 2 バイト文字は 2 文字として数えます。

★引数
nFirst挿入する 0 からの位置を指定します。
pStr挿入する文字列を指定します。

★戻り値
関数が成功すれば TRUE を返します。
それ以外は FALSE を返します。

★使用例
CIkoStr isStr( _T("闇パーティ") );
ANSI:
isStr.Insert( 2, _T("鍋") );
ユニコード:
isStr.Insert( 1, _T("鍋") );
// 結果:
isStr = "闇鍋パーティ"




InsertMB

BOOL InsertMB( int nFirst, LPCTSTR pStr );

★解説
現在の文字列に別の文字列を挿入します。
ANSI での 2 バイト文字は 1 文字として数えます。

★引数
nFirst挿入する 0 からの位置を指定します。
pStr挿入する文字列を指定します。

★戻り値
関数が成功すれば TRUE を返します。
それ以外は FALSE を返します。

★使用例
CIkoStr isStr( _T("The月刊コーヒーTime") );
isStr.InsertMB( 5, _T("妹と") );
// 結果: isStr = "The月刊妹とコーヒーTime"




InsertR

BOOL InsertR( int nLast, LPCTSTR pStr );

★解説
現在の文字列に別の文字列を挿入します。
ANSI での 2 バイト文字は 2 文字として数えます。
Insert() が挿入位置を最初から数えるのに対し、InsertR() は最後から数えます。

★引数
nLast挿入する最後からの位置を指定します。
pStr挿入する文字列を指定します。

★戻り値
関数が成功すれば TRUE を返します。
それ以外は FALSE を返します。

★使用例
ANSI:
CIkoStr isStr( _T("メイドさんとの生活") );
isStr.InsertR( 4, _T("ラブラブ") );
// 結果: isStr = "メイドさんとのラブラブ生活"

ユニコード:
CIkoStr isStr( _T("メイドさんとのラブラブ生活") );
isStr.InsertR( 2, _T("新婚") );
// 結果: isStr = "メイドさんとのラブラブ新婚生活"




InsertRMB

BOOL InsertRMB( int nLast, LPCTSTR pStr );

★解説
現在の文字列に別の文字列を挿入します。
ANSI での 2 バイト文字は 1 文字として数えます。
Insert() が挿入位置を最初から数えるのに対し、InsertR() は最後から数えます。

★引数
nLast挿入する最後からの位置を指定します。
pStr挿入する文字列を指定します。

★戻り値
関数が成功すれば TRUE を返します。
それ以外は FALSE を返します。

★使用例
CIkoStr isStr( _T("国際デー") );
isStr.InsertRMB( 2, _T("メイドさん") );
// 結果: isStr = "国際メイドさんデー"




Cut

CIkoStr Cut( int nFirst, int nStr );

★解説
現在の文字列の指定位置から指定文字数をカットして切り詰めます。
ANSI での 2 バイト文字は 1 文字として数えます。

★引数
nFirstカットする 0 からの位置を指定します。
nStrカットする文字数を指定します。(ANSI での 2 バイト文字は 1 文字として数えます。)
現在の文字数より大きい指定の場合は、指定位置から最後尾までカットされます。

★戻り値
関数が成功すればカットした文字列を返します。
それ以外は空白 _T("") を返します。

★使用例
CIkoStr isStr( _T("ゲームは1日12時間") );
CIkoStr isCutStr;
isCutStr = isStr.Cut( 7, 1 );
// 結果: isStr = "ゲームは1日1時間"
// isCutStr = "2"




Trim

void Trim( LPCTSTR pTrimStr = _T(" ") );

★解説
先頭と末尾にある指定の文字をすべて削除します。
指定の文字でも、未指定の文字に挟まれている場合は削除されないことに注意してください。あくまで「先頭と末尾にある文字」が対象です。
引数を指定しないときは半角スペースを削除します。

★引数
pTrimStr削除したい文字を指定します。複数文字指定できます。

★戻り値
この関数に戻り値はありません。

★使用例
CIkoStr isStr( _T("☆15 歳の妹と 18 歳の姉妹☆") );
isStr.Trim( _T("1妹☆") );
// 結果: isStr = "5 歳の妹と 18 歳の姉"




TrimL

void TrimL( LPCTSTR pTrimStr = _T(" ") );
void TrimLeft( LPCTSTR pTrimStr = _T(" ") );

★解説
先頭にある指定の文字をすべて削除します。
引数を指定しないときは半角スペースを削除します。

★引数
pTrimStr削除したい文字を指定します。複数文字指定できます。

★戻り値
この関数に戻り値はありません。

★使用例
CIkoStr isStr( _T("☆15 歳の妹と 18 歳の姉妹☆") );
isStr.TrimL( _T("1妹☆") );
// 結果: isStr = "5 歳の妹と 18 歳の姉妹☆"




TrimR

void TrimR( LPCTSTR pTrimStr = _T(" ") );
void TrimRight( LPCTSTR pTrimStr = _T(" ") );

★解説
末尾にある指定の文字をすべて削除します。
引数を指定しないときは半角スペースを削除します。

★引数
pTrimStr削除したい文字を指定します。複数文字指定できます。

★戻り値
この関数に戻り値はありません。

★使用例
CIkoStr isStr( _T("☆15 歳の妹と 18 歳の姉妹☆") );
isStr.TrimR( _T("1妹☆") );
// 結果: isStr = "☆15 歳の妹と 18 歳の姉"




Mid

CIkoStr Mid( int nFirst, int nCount ) const;
CIkoStr Mid( int nFirst ) const;

★解説
文字列を抽出します。
ANSI での 2 バイト文字は 2 文字として数えます。

★引数
nFirst抽出を開始する 0 からの位置を指定します。
nCount何文字抽出するか指定します。
0 を指定すると nFirst 以降のすべての文字が抽出されます。

★戻り値
抽出された文字列を CIkoStr 型で返します。

★使用例
CIkoStr isStr1( _T("チョコレート工場") );
CIkoStr isStr2;
isStr2 = isStr1.Mid( 6, 0 );
// 結果:
ユニコード: isStr2 = "工場"
ANSI: isStr2 = "レート工場"

isStr2 = isStr1.Mid( 6, 2 );
// 結果:
ユニコード: isStr2 = "工場"
ANSI: isStr2 = "レ"




Left

CIkoStr Left( int nCount ) const;

★解説
先頭から文字列を抽出します。
ANSI での 2 バイト文字は 2 文字として数えます。

★引数
nCount何文字抽出するか指定します。

★戻り値
抽出された文字列を CIkoStr 型で返します。

★使用例
CIkoStr isStr1( _T("チョコレート工場") );
CIkoStr isStr2;
isStr2 = isStr1.Left( 6 );
// 結果:
ユニコード: isStr2 = "チョコレート"
ANSI: isStr2 = "チョコ"




Right

CIkoStr Right( int nCount ) const;

★解説
末尾から文字列を抽出します。
ANSI での 2 バイト文字は 2 文字として数えます。

★引数
nCount何文字抽出するか指定します。

★戻り値
抽出された文字列を CIkoStr 型で返します。

★使用例
CIkoStr isStr1( _T("チョコレート工場") );
CIkoStr isStr2;
isStr2 = isStr1.Right( 6 );
// 結果:
ユニコード: isStr2 = "コレート工場"
ANSI: isStr2 = "ト工場"




MidMB

CIkoStr MidMB( int nFirst, int nCount ) const;
CIkoStr MidMB( int nFirst ) const;

★解説
文字列を抽出します。
ANSI での 2 バイト文字は 1 文字として数えます。

★引数
nFirst抽出を開始する 0 からの位置を指定します。
nCount何文字抽出するか指定します。
0 を指定すると nFirst 以降のすべての文字が抽出されます。

★戻り値
抽出された文字列を CIkoStr 型で返します。

★使用例
CIkoStr isStr1( _T("チョコレート工場") );
CIkoStr isStr2;
isStr2 = isStr1.MidMB( 6, 0 );
// 結果:
ユニコード: isStr2 = "工場"
ANSI: isStr2 = "工場"

isStr2 = isStr1.MidMB( 6, 1 );
// 結果:
ユニコード: isStr2 = "工"
ANSI: isStr2 = "工"




LeftMB

CIkoStr LeftMB( int nCount ) const;

★解説
先頭から文字列を抽出します。
ANSI での 2 バイト文字は 1 文字として数えます。

★引数
nCount何文字抽出するか指定します。

★戻り値
抽出された文字列を CIkoStr 型で返します。

★使用例
CIkoStr isStr1( _T("チョコレート工場") );
CIkoStr isStr2;
isStr2 = isStr1.LeftMB( 6 );
// 結果:
ユニコード: isStr2 = "チョコレート"
ANSI: isStr2 = "チョコレート"




RightMB

CIkoStr RightMB( int nCount ) const;

★解説
末尾から文字列を抽出します。
ANSI での 2 バイト文字は 1 文字として数えます。

★引数
nCount何文字抽出するか指定します。

★戻り値
抽出された文字列を CIkoStr 型で返します。

★使用例
CIkoStr isStr1( _T("チョコレート工場") );
CIkoStr isStr2;
isStr2 = isStr1.RightMB( 6 );
// 結果:
ユニコード: isStr2 = "コレート工場"
ANSI: isStr2 = "コレート工場"




Compare

int Compare( LPCTSTR pStr ) const;

★解説
大文字と小文字を区別して文字列を比較します。

★引数
pStr現在の文字列と比較する文字列を指定します。

★戻り値
比較する文字列が辞書順で、
現在の文字列と同じなら 0 を返します。
現在の文字列より小さければ 0 より大きい値を返します。
現在の文字列より大きければ 0 より小さい値を返します。

こう書くとややこしいですが、要するに比較する文字列が同じなら 0 が返り、違っていたら 0 以外が返るということです。

★使用例
CIkoStr isStr( _T("Love! Love! メイドさん☆") );
int nRet = isStr.Compare( _T("LOVE! LOVE! メイドさん☆") );
// 結果: nRet = 0 以外 (不一致)




CompareNC

int CompareNC( LPCTSTR pStr ) const;
int CompareNoCase( LPCTSTR pStr ) const;

★解説
大文字と小文字を区別しないで文字列を比較します。

★引数
pStr現在の文字列と比較する文字列を指定します。

★戻り値
比較する文字列が辞書順で、
現在の文字列と同じなら 0 を返します。
現在の文字列より小さければ 0 より大きい値を返します。
現在の文字列より大きければ 0 より小さい値を返します。

★使用例
CIkoStr isStr( _T("Love! Love! メイドさん☆") );
int nRet = isStr.CompareNC( _T("LOVE! LOVE! メイドさん☆") );
// 結果: nRet = 0 (一致)




Find

int Find( LPCTSTR pStr, int nStart = 0 ) const;

★解説
文字列を検索します。
ANSI での 2 バイト文字は 2 文字として数えます。
ただし、2 バイト文字の 2 バイト目の特殊文字 (\ 等) には反応しません。

★引数
pStr検索する文字列を指定します。
nStart0 からの検索開始位置を指定します。
検索開始位置を 0 以外にしても、返される値は常に 0 からの位置です。

★戻り値
検索文字列が見つかると、0 からの位置を返します。
それ以外は -1 を返します。

★使用例
CIkoStr isStr( _T("チーズケーキの次はチョコレートケーキ") );
int nRet = isStr.Find( _T("ケーキ"), 0 );
// 結果:
ユニコード: nRet = 3
ANSI: nRet = 6
int nRet = isStr.Find( _T("ケーキ"), 8 );
// 結果:
ユニコード: nRet = 15
ANSI: nRet = 30




FindMB

int FindMB( LPCTSTR pStr, int nStart = 0 ) const;

★解説
文字列を検索します。
ANSI での 2 バイト文字は 1 文字として数えます。
ただし、2 バイト文字の 2 バイト目の特殊文字 (\ 等) には反応しません。

★引数
pStr検索する文字列を指定します。
nStart0 からの検索開始位置を指定します。
検索開始位置を 0 以外にしても、返される値は常に 0 からの位置です。

★戻り値
検索文字列が見つかると、0 からの位置を返します。
それ以外は -1 を返します。

★使用例
CIkoStr isStr( _T("メイドさん対メイドロボ") );
int nRet = isStr.FindMB( _T("メイド"), 0 );
// 結果: nRet = 0
int nRet = isStr.FindMB( _T("メイド"), 1 );
// 結果: nRet = 6




FindNC

int FindNC( LPCTSTR pStr, int nStart = 0 ) const;

★解説
大文字・小文字を区別しないで文字列を検索します。
ANSI での 2 バイト文字は 2 文字として数えます。
ただし、2 バイト文字の 2 バイト目の特殊文字 (\ 等) には反応しません。

★引数
pStr検索する文字列を指定します。
nStart0 からの検索開始位置を指定します。
検索開始位置を 0 以外にしても、返される値は常に 0 からの位置です。

★戻り値
検索文字列が見つかると、0 からの位置を返します。
それ以外は -1 を返します。

★使用例
CIkoStr isStr( _T("Love☆Love Maid Life!") );
int nRet = isStr.FindNC( _T("LOVE"), 0 );
// 結果: nRet = 0
int nRet = isStr.FindNC( _T("love"), 1 );
// 結果: nRet = 6




FindNCMB

int FindNCMB( LPCTSTR pStr, int nStart = 0 ) const;

★解説
大文字・小文字を区別しないで文字列を検索します。
ANSI での 2 バイト文字は 1 文字として数えます。
ただし、2 バイト文字の 2 バイト目の特殊文字 (\ 等) には反応しません。
★引数
pStr検索する文字列を指定します。
nStart0 からの検索開始位置を指定します。
検索開始位置を 0 以外にしても、返される値は常に 0 からの位置です。

★戻り値
検索文字列が見つかると、0 からの位置を返します。
それ以外は -1 を返します。

★使用例
CIkoStr isStr( _T("Love☆Love Maid Wife!") );
int nRet = isStr.FindNCMB( _T("love"), 0 );
// 結果: nRet = 0
int nRet = isStr.FindNCMB( _T("love"), 1 );
// 結果: nRet = 5




RFind

int RFind( LPCTSTR pStr ) const;
int RFind( TCHAR chStr ) const;
int ReverseFind( LPCTSTR pStr ) const;
int ReverseFind( TCHAR chStr ) const;

★解説
文字列を末尾から検索します。
ANSI での 2 バイト文字は 2 文字として数えます。
ただし、2 バイト文字の 2 バイト目の特殊文字 (\ 等) には反応しません。
★引数
pStr検索する文字列を指定します。
chStr検索する 1 文字を指定します。

★戻り値
検索文字列が見つかると、0 からの位置を返します。
それ以外は -1 を返します。

★使用例
CIkoStr isStr( _T("チーズケーキの次もチーズケーキ") );
int nRet = isStr.RFind( _T("チーズ") );
// 結果:
ユニコード: nRet = 9
ANSI: nRet = 18




RFindMB

int RFindMB( LPCTSTR pStr ) const;
int RFindMB( TCHAR chStr ) const;

★解説
文字列を末尾から検索します。
ANSI での 2 バイト文字は 1 文字として数えます。
ただし、2 バイト文字の 2 バイト目の特殊文字 (\ 等) には反応しません。
★引数
pStr検索する文字列を指定します。
chStr検索する 1 文字を指定します。

★戻り値
検索文字列が見つかると、0 からの位置を返します。
それ以外は -1 を返します。

★使用例
CIkoStr isStr( _T("妹メイド対弟メイド") );
int nRet = isStr.RFindMB( _T("メイド") );
// 結果: nRet = 6




Format

BOOL Format( LPCTSTR pFormat, ... );

★解説
文字列を printf() の書式でフォーマットして格納します。
書式については printf() 関数を参照してください。

★引数
pFormat書式を含んだ文字列を指定します。

★戻り値
関数が成功すると TRUE を返します。
それ以外は FALSE を返します。

★使用例
CIkoStr isStr;
CIkoStr isImouto( _T("妹") );
int nAgeAne = 18;
isStr.Format( _T("%sは5歳です。姉は永遠に%i歳です。"), isImouto.t(), nAgeAne );
// 結果: isStr = "妹は5歳です。姉は永遠に18歳です。"
※Format 関数の可変引数に CIkoStr を渡す場合は、必ず .t() を付けてください。
もしくは明示的に LPCTSTR にキャストしてください。




NumToStr

void NumToStr( int nNum );
void NumToStr64( __int64 nNum );
void NumToStr64( DWORD dwHigh, DWORD dwLow );

★解説
数値を文字列に変換して格納します。

★引数
nNum文字列に変換したい数値を指定します。
dwHigh
dwLow
FindFirstFile() 等で取得できる DWORD を 2 つ使った数値を指定します。

★戻り値
この関数に戻り値はありません。

★使用例
CIkoStr isStr;
int nNum = 15;
isStr.NumToStr( nNum );
// 結果: isStr = "15"




StrToNum

int StrToNum() const;
__int64 StrToNum64() const;

★解説
現在の文字列を int 型、__int64 型に変換します。

★戻り値
現在の文字列を int 型、__int64 型に変換して返します。
文字列が空の場合は 0 を返します。

★使用例
CIkoStr isStr( _T("26") );
int nNum = isStr.StrToNum();
// 結果: nNum = 26




NumToStrVer

void NumToStrVer( int nNum );

★解説
指定の数値を "0.00" のバージョン表記に整形します。

★引数
nNum整形したい数値を指定します。

★戻り値
この関数に戻り値はありません。

★使用例
CIkoStr isStr;
int nNum = 123;
isStr.NumToStrVer( nNum );
// 結果: isStr = "1.23"




InsertComma

int InsertComma();
int InsertComma( LPCTSTR psComma = NULL, int nSpace = 3, int nMode = 1 );
★解説
現在の文字列を "," で区切って整形します。

★引数
psComma区切り文字を指定します。
nSpace何文字ごとに区切るかを指定します。
nMode0 = 左から数えて区切ります。
1 = 右から数えて区切ります。

★戻り値
文字列が区切られたら、挿入された区切り文字数を返します。
それ以外は 0 を返します。

★使用例
CIkoStr isStr( _T("29800") );
int nNum = isStr.InsertComma();
// 結果:
// isStr = "29,800"
// nNum = 1




Enclose

BOOL Enclose( LPCTSTR psLeft, LPCTSTR psRight = NULL, BOOL bCheck = TRUE );
★解説
文字列を指定文字列で囲みます。

★引数
psLeft左側に挿入する文字列を指定します。
psRight右側に挿入する文字列を指定します。
これを未指定にすると、psLeft で左右を囲みます。
bCheckすでに囲まれているかをチェックするかしないかを指定します。
TRUE を指定すると、現在の文字列が囲もうとしている文字ですでに囲まれていた場合、文字を追加しません。(左右それぞれで判定されます。)
FALSE を指定すると、無条件に囲みます。

★戻り値
文字列が囲まれたら TRUE を返します。
それ以外は FALSE を返します。
bCheck で TRUE を指定した場合、現在の文字列に変化がなくても (すでに囲まれていた場合でも) TRUE を返します。

★使用例
CIkoStr isStr( _T("Program Files") );
isStr.Enclose( _T("\"") );
// 結果:
// isStr = ""Program Files""
isStr = _T("|∵|");
isStr.Enclose( _T("┌"), _T("┘") );
// 結果:
// isStr = "┌|∵|┘"




HanToZen

int HanToZen( UINT uMode = CIS_ALL );

★解説
文字列の中の半角文字を全角文字にします。

★引数
uMode次の値の 1 つ、または複数を | で組み合わせて指定します。
意味
CIS_ALLすべての文字を変換対象にします。(デフォルト)
CIS_ALPHABETアルファベットを変換対象にします。
CIS_NUM数字を変換対象にします。
CIS_KIGOU記号を変換対象にします。
CIS_KATAKANAカタカナを変換対象にします。
さらに以下の追加フラグの内いずれかを指定できます。
CIS_DAKUTEN1カナに続く濁点・半濁点を可能な限り 1 文字にします。(デフォルト)
CIS_DAKUTEN2カナに続く濁点・半濁点をそのまま 2 文字にします。

★戻り値
変換した文字の合計数を返します。

★使用例
CIkoStr isStr( _T("スキすきChu!") );
int nRet;
nRet = isStr.HanToZen();
// 結果: isStr = "スキすきChu!"
// nRet = 6;
-or-
nRet = isStr.HanToZen( CIS_ALPHABET | CIS_KIGOU );
// 結果: isStr = "スキすきChu!"
// nRet = 4;
-or-
nRet = isStr.HanToZen( CIS_KATAKANA );
// 結果: isStr = "スキすきChu!"
// nRet = 2;




ZenToHan

int ZenToHan( UINT uMode = CIS_ALL );

★解説
文字列の中の全角文字を半角文字にします。

★引数
uMode次の値の 1 つ、または複数を | で組み合わせて指定します。
意味
CIS_ALLすべての文字を変換対象にします。(デフォルト)
CIS_ALPHABETアルファベットを変換対象にします。
CIS_NUM数字を変換対象にします。
CIS_KIGOU記号を変換対象にします。
CIS_KATAKANAカタカナを変換対象にします。

★戻り値
変換した文字の合計数を返します。

★使用例
CIkoStr isStr( _T("スキすきChu!") );
int nRet;
nRet = isStr.ZenToHan();
// 結果: isStr = "スキすきChu!"
// nRet = 6;
-or-
nRet = isStr.ZenToHan( CIS_ALPHABET | CIS_KIGOU );
// 結果: isStr = "スキすきChu!"
// nRet = 4;
-or-
nRet = isStr.ZenToHan( CIS_KATAKANA );
// 結果: isStr = "スキすきChu!"
// nRet = 2;




ExpandEnvStr

void ExpandEnvStr();

★解説
現在の文字列に含まれる %temp% 等の環境変数を展開します。
この結果はシステム依存であることに注意してください。

★戻り値
この関数に戻り値はありません。

★使用例
CIkoStr isStr( _T("%temp%") );
// 環境変数 %temp% は C:\Windows\temp と仮定 (実際はシステム依存)
isStr.ExpandEnvStr();
// 結果: isStr = "C:\Windows\temp"




PermStr

int PermStr( LPCTSTR pStrA, LPCTSTR pStrB, int nMax = 0 );
int Replace( LPCTSTR pStrA, LPCTSTR pStrB, int nMax = 0 );

★解説
現在の文字列に含まれる指定の文字列を別の文字列に置き換えます。

★引数
pStrA置き換える対象の文字列を指定します。
pStrB置き換える新しい文字列を指定します。
nMax置き換える最大数を指定します。未指定か 0 ですべて置き換えます。

★戻り値
置き換えられた文字列の合計を返します。

★使用例
CIkoStr isStr( _T("今日のご飯は%str%。多分明日も%str%。") );
int nRet = isStr.PermStr( _T("%str%"), _T("カレーうどん") );
// 結果:
isStr = "今日のご飯はカレーうどん。多分明日もカレーうどん。"
nRet = 2




PermStrNC

int PermStrNC( LPCTSTR pStrA, LPCTSTR pStrB, int nMax = 0 );

★解説
大文字・小文字を区別しないで、現在の文字列に含まれる指定の文字列を別の文字列に置き換えます。

★引数
pStrA置き換える対象の文字列を指定します。
pStrB置き換える新しい文字列を指定します。
nMax置き換える最大数を指定します。未指定か 0 ですべて置き換えます。

★戻り値
置き換えられた文字列の合計を返します。

★使用例
CIkoStr isStr( _T("今日のご飯は%str%。多分明日も%str%。") );
int nRet = isStr.PermStrNC( _T("%STR%"), _T("たまごかけご飯") );
// 結果:
isStr = "今日のご飯はたまごかけご飯。多分明日もたまごかけご飯。"
nRet = 2




InStrCount

int InStrCount( LPCTSTR pInStr ) const;

★解説
現在の文字列の中に指定の文字列が何個あるか調べます。
★引数
pInStr数える文字列を指定します。

★戻り値
指定文字列の総数を返します。

★使用例
CIkoStr isStr( _T("すもも") );
int nRet = isStr.InStrCount( _T("も") );
// 結果: nRet = 2




Clear

void Clear();
void Empty();

★解説
文字列を空にします。(現在のバッファを NULL 文字で埋めます。)

★戻り値
この関数に戻り値はありません。

★使用例
CIkoStr isStr( _T("大金持ちになってメイドさんを雇いまくる") );
isStr.Clear();
// 結果: isStr = ""




Delete

void Delete();

★解説
内部バッファそのものを削除します。それまでの文字列はなくなります。
ただし、その後文字を代入すればまたバッファが作成されます。

★戻り値
この関数に戻り値はありません。

★使用例
CIkoStr isStr( _T("宝くじを当てて妹の服を買いまくる") );
isStr.Delete();
// 結果: isStr = NULL




IsEmpty

BOOL IsEmpty() const;

★解説
文字列が空か調べます。

★戻り値
現在の文字列が空なら TRUE を返します。
それ以外は (何らかの文字が入っていれば) FALSE を返します。

★使用例
CIkoStr isStr( _T("たまごかけご飯") );
BOOL bRet = isStr.IsEmpty();
// 結果: bRet = FALSE
isStr.Clear();
bRet = isStr.IsEmpty();
// 結果: bRet = TRUE




MakeUpper

void MakeUpper();

★解説
文字列 (アルファベット) を大文字にします。

★戻り値
この関数に戻り値はありません。

★使用例
CIkoStr isStr( _T("Chuっ☆") );
isStr.MakeUpper();
// 結果: isStr = "CHUっ☆"




MakeLower

void MakeLower();

★解説
文字列 (アルファベット) を小文字にします。

★戻り値
この関数に戻り値はありません。

★使用例
CIkoStr isStr( _T("Chuっ☆") );
isStr.MakeLower();
// 結果: isStr = "chuっ☆"




c

LPCSTR c();

★解説
ユニコードバージョンで、現在のユニコード文字列をマルチバイト (ANSI) 文字列に変換し、新しい別のバッファに格納してそのポインタを返します。(現在の文字列に影響はありません。)
このポインタは一時的なものなので、後で使うことはできません。
MFC のデバッグ TRACE (ANSI のみ出力できる) 用に使うことを想定されています。
ANSI バージョンでは、変換もバッファ作成も行われず、ただ自身の文字列へのポインタを返すだけです。

★戻り値
関数が成功するとマルチバイト文字列へのポインタを返します。
それ以外は NULL を返します。

★使用例
CIkoStr isStr( L"ユニコード文字" );
TRACE( "%s", isStr.c() );
// 結果: デバッグウィンドウにマルチバイト文字に変換された "ユニコード文字" が出力される




t

LPCTSTR t() const;

★解説
iTRACE 等の可変引数に CIkoStr を使う場合、(LPCTSTR) 等と明示的にキャストしないと文字化けする場合がありますが、そこでいちいち (LPCTSTR) 等と書くのがめんどくさい用のキャスト関数です。

★戻り値
現在の文字列へのポインタを返します。

★使用例
CIkoStr isStr( _T("トイプードルの可愛さは反則") );
iTRACE( _T("%s"), isStr.t() );
// 結果: デバッグウィンドウに "トイプードルの可愛さは反則" が正しく出力される




GetWndText

BOOL GetWndText( HWND hWnd );
BOOL GetWindowText( HWND hWnd );

★解説
CIkoStr に直接ウィンドウ タイトルを取得します。

★引数
hWndウィンドウ ハンドルを指定します。

★戻り値
関数が成功すると TRUE を返します。
それ以外は FALSE を返します。

★使用例
CIkoStr isStr;
// HWND hWnd のウィンドウ タイトルが "メイド服の作り方" だと仮定。
BOOL bRet = isStr.GetWndText( hWnd );
// 結果:
isStr = "メイド服の作り方"
bRet = TRUE




SetWndText

BOOL SetWndText( HWND hWnd );
BOOL SetWindowText( HWND hWnd );

★解説
現在の文字列でウィンドウ タイトルを設定します。

★引数
hWndウィンドウ ハンドルを指定します。

★戻り値
関数が成功すると TRUE を返します。
それ以外は FALSE を返します。

★使用例
CIkoStr isStr = "妹の作り方"
BOOL bRet = isStr.SetWndText( hWnd );
// 結果:
hWnd のウィンドウ タイトルが "妹の作り方" に。
bRet = TRUE




FormatByteSize64

BOOL FormatByteSize64();
BOOL FormatByteSize64( __int64 nNum );
BOOL FormatByteSize64( DWORD dwHigh, DWORD dwLow );

★解説
引数がない場合は現在の数字文字列を StrFormatByteSize64() 関数で整形します。
それ以外は引数の数値を整形します。

★引数
nNum文字列に変換したい数値を指定します。
dwHigh
dwLow
FindFirstFile() 等で取得できる DWORD を 2 つ使った数値を指定します。

★戻り値
関数が成功すると TRUE を返します。
それ以外は FALSE を返します。

★使用例
CIkoStr isStr;
__int64 nNum = (__int64)2400000000;
BOOL bRet = isStr.FormatByteSize64( nNum );
// 結果:
isStr = 2.23 GB
bRet = TRUE

nNum = (__int64)120000000;
isStr.FormatByteSize64( nNum );
// 結果:
isStr = 114 MB




LoadStr

BOOL LoadStr( UINT uID, HINSTANCE hInst = NULL );

★解説
リソーステーブルから文字列を取り出して格納します。

★引数
uIDリソース識別子を指定します。
hInstリソースを持つインスタンスハンドルを指定します。
NULL か未指定の場合は呼び出し元アプリケーションのものが使われます。

★戻り値
関数が成功すると TRUE を返します。
それ以外は FALSE を返します。

★使用例
CIkoStr isStr;
// リソース番号 5001 に "酔って妹に蜂蜜シロップをかけようとする姉" があると仮定
BOOL bRet = isStr.LoadStr( 5001 );
// 結果:
isStr = "酔って妹に蜂蜜シロップをかけようとする姉"
bRet = TRUE




GetCrUserName

BOOL GetCrUserName();

★解説
現在のユーザー名を取得します。

★戻り値
関数が成功すると TRUE を返します。
それ以外は FALSE を返します。

★使用例
CIkoStr isStr;
// 現在のユーザー名が Mary と仮定
BOOL bRet = isStr.GetCrUserName();
// 結果:
isStr = "Mary"
bRet = TRUE




LoadTextFile

BOOL LoadTextFile( LPCTSTR pFilePath );

★解説
テキストファイルから文字列を読み込みます。(超簡易版)
文字コードの変換は一切しないので、ユニコードバージョンなら UTF-16、ANSI なら Shift-JIS のみを読み込めます。
UTF-16 のファイルに BOM 情報があった場合、その部分は読み飛ばして文字情報のみ読み込みます。
またその場合、BOM が UTF-16 Big-Endian であった場合に限り、UTF-16 Little-Endian に変換して読み込みます。

★引数
pFilePathテキストファイルのフルパスを指定します。

★戻り値
関数が成功すると TRUE を返します。
それ以外は FALSE を返します。

★使用例
CIkoStr isStr;
// 中身が "今日も良い一日でした。" の C:\Windows\test.txt というファイルがあると仮定
BOOL bRet = isStr.LoadTextFile( _T("C:\\Windows\\test.txt") );
// 結果:
isStr = "今日も良い一日でした。"
bRet = TRUE




SaveTextFile

BOOL SaveTextFile( LPCTSTR pFilePath, BOOL bBOM = FALSE, int nEMode = 0 );

★解説
テキストファイルに現在の文字列を上書きで書き込みます。(超簡易版)
文字コードの変換は一切しないので、ユニコードバージョンなら UTF-16、ANSI なら Shift-JIS で書き込みます。
また、改行コードの変換等も行いません。
(Windows での改行コードは \r\n にするのが一般的なようです。)

★引数
pFilePathテキストファイルのフルパスを指定します。
ファイルが無ければ作成されます。
bBOMTRUE を指定すると、ファイルの先頭にエンコードに応じた BOM 情報を付加します。
nEModeエンコードの種類を指定します。
0 … UTF-16 Little-Endian として、CIkoStr の型そのままを書き込みます。
1 … UTF-16 Big-Endian に変換して書き込みます。現在の文字列に影響はありません。

★戻り値
関数が成功すると TRUE を返します。
それ以外は FALSE を返します。

★使用例
CIkoStr isStr( _T("今日も良い一日でした。\r\n明日も良い一日でありますように。") );
BOOL bRet = isStr.SaveTextFile( _T("C:\\Windows\\test.txt") );
// 結果:
C:\Windows\test.txt というファイルが作成され、
今日も良い一日でした。
明日も良い一日でありますように。
という文字列が書き込まれる
bRet = TRUE




Attach

void Attach( LPTSTR pStr, int nBuffSize );

★解説
既存の TCHAR 型バッファへのポインタ (LPTSTR) を CIkoStr に関連付けます。
以後この文字列は CIkoStr のメンバ関数で制御できます。
ただし、このポインタが指すバッファは内部バッファの内容 (文字列) が変更される関数で delete[] され、作り変えられるかもしれないことに注意してください。
また、CIkoStr のデストラクタでは必ず delete[] されますので、それが困る場合はその前に Detach() を呼び出してください。

注: Attach 直後に文字列の長さを調べるので、Attach する前に最低でも 1 個の NULL 文字を入れておいてください。

★引数
pStrTCHAR 型バッファへのポインタを指定します。
nBuffSize正しいバッファサイズ (配列要素数) を指定します。

★戻り値
この関数に戻り値はありません。

★使用例
CIkoStr isStr;
TCHAR* pStr = new TCHAR[256]();
pStr[0] = '\0';
isStr.Attach( pStr, 256 );
// 結果:
pStr は CIkoStr に取り込まれ、以後 isStr として制御できます。




Detach

LPTSTR Detach();
★解説
現在の内部バッファへのポインタ (LPTSTR) を返し、CIkoStr から切り離します。
バッファサイズが必要な場合は Detach() する前に GetBuffSize() で取得しておいてください。
以後このポインタが指すバッファは CIkoStr の影響を受けません。
再び Attach() しない場合は、不要になった時点で必ず delete[] してください。さもないとメモリリークを起こします。
また、Detach() された CIkoStr は NULL 状態 (生まれたて) になり、再び別の文字列を代入したりできます。

★戻り値
CIkoStr から切り離された TCHAR 型バッファへのポインタを返します。
NULL の可能性もあることに注意してください。

★使用例
CIkoStr isStr( _T("CIkoStr は文字列を代入しないとバッファは作成されない") );
TCHAR* pStr = isStr.Detach();
// 結果:
isStr は NULL になり、CIkoStr によって作成された pStr は以後 CIkoStr の影響を受けない




GetBuff

LPTSTR GetBuff();

★解説
CIkoStr が所持する TCHAR 型バッファへのポインタ (LPTSTR) を取得します。
主に他の関数の引数 LPTSTR へ CIkoStr を直接渡せるようにするものです。
GetBuff() で内部バッファをいじった後は、必ず ResetLen() を呼び出してください。

★戻り値
CIkoStr が所持する TCHAR 型バッファへのポインタ (LPTSTR) を返します。
NULL の可能性もあることに注意してください。

★使用例
CIkoStr isStr( 256 ); // バッファサイズ (配列要素数) 256 で作成
// hWnd のウィンドウタイトルが "若返りの薬を妹に飲み続けさせようとたくらむ姉の物語" と仮定
GetWindowText( hWnd, isStr.GetBuff(), 256 );
isStr.ResetLen() // GetBuff() した後は必ず ResetLen() を呼び出す
// 結果:
isStr = "若返りの薬を妹に飲み続けさせようとたくらむ姉の物語"




GetBuffSize

int GetBuffSize() const;

★解説
現在のバッファサイズ (TCHAR 配列要素数) を取得します。
実際のバイト容量を得るには、これに sizeof(TCHAR) をかけてください。
GetBuffSize() * sizeof(TCHAR) = 実際のバイト容量 となります。

★戻り値
現在のバッファサイズ (TCHAR 配列要素数) を返します。
文字列の長さと同じとは限らないことに注意してください。

★使用例
CIkoStr isStr( 1024 );
int nBuffSize = isStr.GetBuffSize();
// 結果: nBuffSize = 1024




ResetLen

int ResetLen();

★解説
内部に保存している文字列の長さを現在のバッファの文字列の長さに再設定します。
GetBuff() で内部バッファをいじった後は必ず ResetLen() を呼び出してください。

★戻り値
再設定された文字列の長さを返します。
それ以外は 0 を返します。

★使用例
GetBuff() を参照してください。




SetBuffSize

BOOL SetBuffSize( int nBuffSize );

★解説
バッファサイズ (配列要素数) を変更します。それまでの文字列はなくなります。

★引数
nBuffSize新しいバッファサイズ (配列要素数) を指定します。

★戻り値
関数が成功すると TRUE を返します。
それ以外は FALSE を返します。

★使用例
CIkoStr isStr( 64 );
BOOL bRet = isStr.SetBuffSize( 1024 );
// 結果:
isStr のサイズが 64 から 1024 に変更される
bRet = TRUE




iTRACE マクロ

iTRACE( LPCTSTR pFormat, ... );

★解説
デバッグビルド時のみ、デバッグウィンドウに文字列を printf() の書式でフォーマットして出力します。
MFC の TRACE マクロに相当します。
(ただし、iTRACE はユニコード文字列も出力できます。)
リリースビルド時はこのマクロは何も行いません。

★引数
pFormat書式を含んだ文字列を指定します。

★戻り値
このマクロに戻り値はありません。

★使用例
CIkoStr isStr( _T("もじもじ") );
int nNum = 777;
iTRACE( _T("デバッグ:[%s,%i]\n"), isStr.t(), nNum );
// 結果:
デバッグウィンドウに以下の文字列が出力される。
デバッグ:[もじもじ,777]




iASSERT マクロ

iASSERT( (戻り値が BOOL の式) );

★解説
デバッグビルド時のみ、指定された式が FALSE (0) のときに、メッセージを出力しプログラムの実行を中止します。0 以外のときは何もしません。
MFC の ASSERT マクロに相当します。
リリースビルド時はこのマクロは式の評価を行いません。(このマクロの中にある評価式そのものが消滅するので、例えば関数呼び出しを書いた場合、その関数呼び出し自体がなかったことになります。)

★引数
戻り値が BOOL の式0 または 0 以外に評価される式を指定します。

★戻り値
このマクロに戻り値はありません。

★使用例
CIkoStr isStr( _T("もじもじ") );
iASSERT( isStr.IsEmpty() );
// 結果:
デバッグビルド時:
IsEmpty() の結果が FALSE なのでデバッグウィンドウに以下のメッセージが出力され、プログラムが停止する。
iASSERT FALSE でちゃいましたっ! <ソースファイル名> (行番号)

リリースビルド時:
isStr.IsEmpty() の呼び出し自体がなくなる。




iVERIFY マクロ

iVERIFY( (戻り値が BOOL の式) );

★解説
デバッグビルド時のみ、指定された式が FALSE (0) のときに、メッセージを出力しプログラムの実行を中止します。0 以外のときは何もしません。
MFC の VERIFY マクロに相当します。
リリースビルド時でもこのマクロは式の評価を行います。
ただし、式の評価が FALSE でもメッセージを表示したりプログラムを停止することはありません。

★引数
戻り値が BOOL の式0 または 0 以外に評価される式を指定します。

★戻り値
このマクロに戻り値はありません。

★使用例
CIkoStr isStr( _T("もじもじ") );
iVERIFY( isStr.IsEmpty() );
// 結果:
デバッグビルド時:
IsEmpty() の結果が FALSE なのでデバッグウィンドウに以下のメッセージが出力され、プログラムが停止する。
iVERIFY FALSE でちゃいましたっ! <ソースファイル名> (行番号)

リリースビルド時:
isStr.IsEmpty() は呼び出されるが、このマクロは何もしない。




バージョンアップ履歴

2014/12/09:Ver1.09

(追加) 文字列を指定文字列で囲む Enclose() を追加しました。
(追加) PermStr()、PermStrNC() に、置き換える最大数を指定するオプションを追加しました。
2014/08/26:Ver1.08

(修正・変更) ANSIバージョンの Insert()、InsertR()、Mid()、Left()、Right()、Find() で、特定の文字が入っていると正しく 2 バイト文字の判定ができないことが分かったので、2 バイト文字判定は MB シリーズのみにしました。
(追加) 指定の数値を "0.00" のバージョン表記に整形する NumToStrVer() を追加しました。
2014/07/31:Ver1.07

(修正・変更) ANSIバージョンの Insert()、InsertR()、Mid()、Left()、Right()、Find() で、指定開始位置が 2 バイト文字の 2 バイト目にかかっているかチェックし、かかっていたら開始位置を 1 ずらすようにしました。
(追加) 大文字・小文字を区別しないで処理する FindNC()、FindNCMB()、PermStrNC() を追加しました。
2014/07/27:Ver1.06

(修正) ANSIバージョンの RFind() で、2 バイト文字の2バイト目に反応することがあったのを修正しました。("\" を検索して "表" の 2 バイト目にヒットする等)
(修正) LoadTextFile() で、読み込みに成功した後、文字数とバッファサイズの情報を更新し忘れていたのを修正しました。
(修正・変更) UNICODEバージョンの LoadTextFile() で、BOM チェックを行い、BOM があった場合はその部分を読み飛ばすようにしました。
(変更) UNICODEバージョンの LoadTextFile() で、BOM チェックを行い、BOM が UTF-16 Big-Endian であった場合に限り、UTF-16 Little-Endian に変換して読み込めるようにしました。
(変更・追加) UNICODEバージョンの SaveTextFile() で、BOM を付加するオプションを追加しました。
(追加) ANSIバージョンの 2バイト文字を 1 文字として数えるシリーズに InsertMB()、InsertRMB()、FindMB()、RFindMB() を追加しました。
(追加) __int64 に対応した NumToStr64()、StrToNum64() を追加しました。
(追加) 数字文字列を "," で区切って整形する InsertComma() を追加しました。
(追加) その他、GetWndText()、SetWndText()、FormatByteSize64() を追加しました。
2014/06/09:Ver1.05

(修正) operator+=, LoadTextFile() で、メモリリークする可能性があった部分を修正しました。
2009/11/27:Ver1.04

(修正) Insert() で正しく処理できたのに FALSE を返していたのを修正しました。
(追加) 文字列を最後から数えて挿入する InsertR() を追加しました。
2009/06/10:Ver1.03

(修正) GetAt() でアクセス違反が起こっていたのを修正しました。
(追加) 半角文字を全角文字にする HanToZen() を追加しました。
(追加) 全角文字を半角文字にする ZenToHan() を追加しました。
(変更) NULL 状態の CIkoStr に = 演算子で長さ 0 の文字列 _T("") を代入するとき、1 文字のバッファを作って _T("") となるようにしました。(今までは NULL のまま変わりませんでした。)
(変更・修正) NULL 状態でない CIkoStr に別のバッファを Attach() する場合、既存バッファを削除するようにしました。
(修正) LoadStr() でプログラムターゲットが ANSI の場合、1 バイト文字と 2 バイト文字が混在したリソース文字列でまだ 128 バイト以上のものが正しく取得できない場合があった不具合を修正しました。
(変更) Microsoft Windows SDK 6.2.6000.0.18 でも警告が出ないように、一部の古い関数をセキュリティが強化されたバージョンに置き換えました。(_vsntprintf() → _vsntprintf_s() 等)
2008/05/24:Ver1.01

(修正) LoadStr() で 128 バイト以上のリソース文字列を正しく取得できない不具合を修正しました。




・おもちゃ箱に戻る

(^^)/