お世話になります。
///////////開発環境///////////
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言語関数
は避けたいのですが、何かいい案ありますでしょうか??
ご教示宜しくお願いいたします。
No.1ベストアンサー
- 回答日時:
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
宜しくお願いいたします
No.2
- 回答日時:
二番目を取り出したいのなら二回検索すればどうでしょう?
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 を返します。
とりあえず検索してみて、見つかったら見つかった位置+文字列の長さ
を開始位置にしてもう一回検索すると。
ご回答ありがとうございます。
>とりあえず検索してみて、見つかったら見つかった位置+文字列の長さを
>開始位置にしてもう一回検索すると。
とありますが、文字列の長さが毎回違うので、バイト指定できないんですよね・・。
それで、少し思いついたのですが、こんな書き方ではダメですか??
strstrを使ってしまうのですが・・・。
/////////2番目のprogramを抜き出す/////////////////
CString test(":program!~program@123.456 TEST :message");
test = strstr(test,"~");
test.Replace('@','\0');
test.Delete(0,1);
このやり方で一応取れるのですが、あまり良くないですか??
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- PHP カラーミーショップのSmartyでの文字列抜き出し 2 2022/05/06 11:51
- Excel(エクセル) LEFT関数で文字数を指定しないで取りだす方法 7 2023/06/30 09:49
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- C言語・C++・C# c言語 配列とポインタについて 3 2023/02/09 22:53
- PostgreSQL 数値が定期的にあらわれる文字列から、いくつめに出現した数値が指定して切り出したい 1 2023/06/08 13:12
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
このQ&Aを見た人はこんなQ&Aも見ています
-
餃子を食べるとき、何をつけますか?
みんな大好き餃子。 ふと素朴な疑問ですが、餃子には何をつけて食べますか? 王道は醤油とお酢でしょうか。
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
忘れられない激○○料理
これまでに食べたもののなかで、もっとも「激○○」だった料理を教えて下さい。 激辛、でも激甘でも。 激ウマ、でも激マズでも。
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
CString型 全角半角を意識せずに「1文字」ずつ取り出す
C言語・C++・C#
-
-
4
CString から LPCTSTRの型に変換
C言語・C++・C#
-
5
VC++で文字列から任意の文字を削除するにはどうしたらいいですか?
C言語・C++・C#
-
6
画面を強制的に再描画させる方法
C言語・C++・C#
-
7
CStringの中から数字だけの場合と、その他が含まれる場合を識別する方法
C言語・C++・C#
-
8
EDITコントロールで入力できる文字を制限するには?
C言語・C++・C#
-
9
エディットボックスの入力制限について
C言語・C++・C#
-
10
エディットコントロールでEnter押した時の動作
C言語・C++・C#
-
11
CString型の文字列連結について
C言語・C++・C#
-
12
文字列の置換をCStringで(C++)
C言語・C++・C#
-
13
CStringをwchar_tに変換したい
C言語・C++・C#
-
14
Debug Assertion Failed?
C言語・C++・C#
-
15
ボタンの表示の色、フォントを変更したい
C言語・C++・C#
-
16
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
17
構文エラー;"が型の前にありませんとは、どうしたら解決できるのですか。"
C言語・C++・C#
-
18
VC++にてボタン等のサイズ取得
C言語・C++・C#
-
19
文字列がNULLか空文字列かの判定
C言語・C++・C#
-
20
メモリリークの件
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
文字列からタブコードを取り除...
-
EXCELで=より左の文字を一括で...
-
Left関数とRight関数を合わせた...
-
【Excel VBA】複数ある特定の文...
-
VBAでの Replace関数で、ワイル...
-
vbsからバッチファイル実行時の...
-
Excelで指数表現しないようにす...
-
エクセルで文字列の最大値を抽...
-
C#で年月を比較する
-
Excelで3E8を3.00E+8にしない方...
-
エクセルで文字列をtxtファイル...
-
アクセスで特定の数字以外(複...
-
16進数を10進数に簡単に変換す...
-
同一セル内に関数と文字列を同...
-
VBA2005 16進を2桁で表示したい。
-
CStringの文字列検索&抜き出し...
-
VBの「As String * 128」とは?
-
C# 巨大な文字列の計算をさせたい
-
MS SQLServer のSQLで文字列の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
Excelで3E8を3.00E+8にしない方...
-
エクセルで文字列をtxtファイル...
-
Excelで指数表現しないようにす...
-
【Excel VBA】複数ある特定の文...
-
Left関数とRight関数を合わせた...
-
エクセルで文字列の最大値を抽...
-
同一セル内に関数と文字列を同...
-
VBA2005 16進を2桁で表示したい。
-
VBの「As String * 128」とは?
-
MS SQLServer のSQLで文字列の...
-
エクセル 数値データを桁をそ...
-
C#で年月を比較する
-
16進数を10進数に簡単に変換す...
-
“丸(〇/○/◯)”に似た文字…
-
アクセスで特定の数字以外(複...
-
Msgboxの×が押されたとき
おすすめ情報