CStringは文字列を扱うATL/MFC共有クラス・・・。
正確にはCStringTだが、CStringでもTCHAR対応で自動で切り替わるようになってて普通に使えるので、これで・・・。
今回は、C++標準ライブラリのstring(std::string)の頁で作ったプログラムのCString版を作る・・・。
コンソールアプリケーションなので、MFCだけど、[Win32 コンソール アプリケーション]で作る・・・。
で、空のプロジェクトにしておく・・・。
プロパティで、
[MFCの使用]を見ると、[標準 Windows ライブラリを使用する]になっているので、
[スタティック ライブラリで MFC を使用する]にする・・・。
でプログラムは、
標準入出力をするので、"stdio.h"をインクルードしている・・・。
main関数のTCHAR版である_tmain関数を定義している・・・。
(引数とかよくみるとTCHARになってるね・・・。)
TCHARの文字配列、そして4つのCStringを用意・・・。
CStringでは、初期化を引数付きのコンストラクタで行うこともできるし、従来通り'='演算子で行うこともできる・・・。
(まあ、これはstd::stringでもできるけど・・・。)
とりあえずこの状態で出力・・・。(1)
CStringのインスタンスは_tprintfの引数に直接渡せる・・・。
これは、std::stringにはできない・・・。
(ただし、c_str()メンバ関数を使って間接的に文字列を渡すことはできるけど・・・。)
次に、'='演算子で文字列を代入してみる・・・。
cstrStr1に"ABC"を代入・・・。
で、また出力・・・。(2)
今度は、cstrStr2にcstrStr1を代入・・・。
で、また出力・・・。(3)
次は文字列の連結・・・。
cstrStr2にcstrStr3を連結・・・。
そして、
また出力・・・。(4)
最後は文字列を入力してもらって、それをcstrStr2と比較して同じ文字列かどうかを判定する・・・。
_tscanfにcstrInputは直接渡せないので、tszInputでワンクッションおいている・・・。
cstrInputに代入したら、比較演算子でcstrStr2と比較し、結果を表示・・・。(5)
コンソールアプリを実行する場合は、[デバッグなしで開始]のほうが、プログラムが終了してもコマンドプロンプトを閉じないので、そっちのほうがいい・・・。
実行すると、
cstrStr1 = cstrStr2 = ABCDE cstrStr3 = XYZ cstrStr1 = ABC cstrStr2 = ABCDE cstrStr3 = XYZ cstrStr1 = ABC cstrStr2 = ABC cstrStr3 = XYZ cstrStr1 = ABC cstrStr2 = ABCXYZ cstrStr3 = XYZ cstrInput: ABC cstrInput( = ABC) != cstrStr2( = ABCXYZ) 続行するには何かキーを押してください . . .
一致しない場合はこうなる・・・。
改行で区切られてるそれぞれの処理が(1)~(5)の結果・・・。
「続行するには何かキーを押してください . . .」はコンソールが勝手に出しているものなので、気にしない・・・。
何かキーを押したら、コマンドプロンプトを閉じるけど・・・。
一致する場合は、
cstrStr1 = cstrStr2 = ABCDE cstrStr3 = XYZ cstrStr1 = ABC cstrStr2 = ABCDE cstrStr3 = XYZ cstrStr1 = ABC cstrStr2 = ABC cstrStr3 = XYZ cstrStr1 = ABC cstrStr2 = ABCXYZ cstrStr3 = XYZ cstrInput: ABCXYZ Match! cstrInput( = ABCXYZ) == cstrStr2( = ABCXYZ) 続行するには何かキーを押してください . . .
こうなる・・・。