プロが教えるわが家の防犯対策術!

お世話になります。
///////////開発環境///////////
WinXP VisualStudio 2005 SDI MFC

以上の環境にてプログラムしています。

現在CString型の変数の中にある文字列操作について悩んでいます。

例えば、 CString Test(:program!~program@123.456 TEST :message);

このような内容が入ってるとします。
こんな時に例えばTESTを抜き出したい時にどうすればいいでしょうか?
なお、毎回TESTという文字列ではなくTEST2などの文字列が変わるもの
だとするとバイト数指定が出来なくて困っています。
バイト数指定しないでTESTのTのアドレスをGETしてそれを'\0'までを
切り抜くと:messageの部分まで取れてしまいます。
でもバイト指定が可変なので、出来ない・・。どうすればいいのでしょうか??
同様にmessageの部分も毎回変わっていてバイト数指定出来ません。
こちらの方は、文字列の最後から:を探していって:が見つかったらその
アドレスから'\0'までを切り出せばいいと思うのですが、もし
messageの部分に:mess:ageこういうメッセージが送られて来た時に、
:ageしか取れなくなり、本当はmess:ageを切り抜きたいのです。
せっかくMFCのCStringを使っているので、strtokやstr~などのC言語関数
は避けたいのですが、何かいい案ありますでしょうか??
ご教示宜しくお願いいたします。

A 回答 (2件)

CStringクラスの持っているメソッドのFind と Mid を使う。



CStringT のメンバ (ATL/MFC)
http://msdn2.microsoft.com/ja-jp/library/abzc998 …
CStringT::Find (ATL/MFC)
http://msdn2.microsoft.com/ja-jp/library/hz2099k …
CStringT::Mid (ATL/MFC)
http://msdn2.microsoft.com/ja-jp/library/b4c90k3 …

この回答への補足

ご回答ありがとうございます。

CStringT::Find は文字列を検索 CString::Midは文字列の中央を抜き出す
という事ですが、例えば上記のに示した感じの文字列の2番目のprogramを
取り出したい時にどのように、記述すれば宜しいのでしょうか?

:program!~program@123.456 TEST :message

宜しくお願いいたします

補足日時:2007/06/15 13:31
    • good
    • 0

二番目を取り出したいのなら二回検索すればどうでしょう?


CStringT::Find (ATL/MFC)
http://msdn2.microsoft.com/ja-jp/library/hz2099k …

int Find(
PCXSTR pszSub,
int iStart=0
) const throw( );
int Find(
XCHAR ch,
int iStart=0
) const throw( );

パラメータ

pszSub

検索する部分文字列。

iStart

文字列内の検索開始文字のインデックス。 0 にすると、文字列の先頭から検索されます。

ch

検索する 1 文字。

戻り値戻り値

指定した部分文字列または文字と一致した CStringT オブジェクト内の最初の文字を示す、0 から始まるインデックス番号を返します。一致した部分文字列または文字がない場合は -1 を返します。

とりあえず検索してみて、見つかったら見つかった位置+文字列の長さ
を開始位置にしてもう一回検索すると。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
>とりあえず検索してみて、見つかったら見つかった位置+文字列の長さを
>開始位置にしてもう一回検索すると。

とありますが、文字列の長さが毎回違うので、バイト指定できないんですよね・・。

それで、少し思いついたのですが、こんな書き方ではダメですか??
strstrを使ってしまうのですが・・・。

/////////2番目のprogramを抜き出す/////////////////

CString test(":program!~program@123.456 TEST :message");

test = strstr(test,"~");
test.Replace('@','\0');
test.Delete(0,1);

このやり方で一応取れるのですが、あまり良くないですか??

お礼日時:2007/06/16 02:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A