Article View: japan.comp.lang.visual-c++
Article #63Re: VC++6.0での文字列の操作について
From: 電子のお針箱
Date: Sat, 01 May 1999 00:00
Date: Sat, 01 May 1999 00:00
59 lines
3542 bytes
3542 bytes
> 現在作成しているプログラムでわからない所があります。
> テキストファイルを一行単位で読み込んで、CString型の変数に格納し
> ます。格納しているデータの例は以下のとおりです。
> あいうえお<TD>かきくけこ</TD>さしすせそ<TD>たちつてと</TD>
> というようになっています。これを、<TD>と</TD>を抜き出して、
> あいうえお・かきくけこ・さしすせそ・たちつてと、にします。
> そしてこれらを別々のCString型の変数に格納したいのです(できれば
> 配列にしたい)。
// 元の文字列 (壊されるので、必要ならコピーを取ってね。)
CString S(_T("あいうえお<TD>かきくけこ</TD>"
"さしすせそ<TD>たちつてと</TD>"));
CString C[2]; // デリミタ
CString D[100]; // 結果格納エリア
C[0] = "<TD>"; // デリミタを設定。
C[1] = "</TD>";
int di = 0; // 結果の個数
// 元の文字列がある限り...
while(0 < S.GetLength()) {
int ci; // デリミタ配列用のインデックス
int sp = -1; // デリミタの開始位置 (-1 は見つからない時)
int len; // デリミタの長さ
// デリミタと一致するところがあるか ?
for(ci = 0; ci < 2; ci++){
int sp1 = S.Find(C[ci]);
// とりあえずあった...
if(0 <= sp1){
// 開始位置が未定義か以前見つかったものより左
// に有る時...
if(sp < 0 || sp1 < sp){
// その位置を覚えておく。
sp = sp1;
// 同時にその時のデリミタの長さを覚えておく。
// (後でデリミタをスキップする時に使う。)
len = C[ci].GetLength();
}
}
}
if(sp < 0){ // デリミタが見つかったか ?
D[di++] = S; // 見つからない時は、残りの文字列をセットして...
break; // 退散する。
}
// デリミタまでを抜き出してセットする。
D[di++] = S.Mid(0, sp);
// 今回見つかったデリミタ以降の文字列をセットする。
S = S.Mid(sp + len);
}
// ここまで来たら D[] に結果が、di に結果の個数が入っています。
なお、D[] のレンジチェックはしていませんのであしからず。(上限がある
なら、D[] の定義の時にその上限+αで定義して下さい。(でも結構上限なん
か変わりそうだから、チェックしておいたほうが無難かも...。))
--
-------------------
電子のお針箱
GED03577@nifty.ne.jp
-------------------
Technical Details
Message-ID:
<01be93f4$bdeece00$0100a8c0@fmv57d4s6b>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<7ga1mu$ivb$1@meshsv230.tk.mesh.ad.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: 110a07,979ad9fc6dab1dd1 X-Google-Attributes: gid110a07,public X-Google-Thread: 10a2c7,979ad9fc6dab1dd1 X-Google-Attributes: gid10a2c7,public From: "電子のお針箱" <GED03577@nifty.ne.jp> Subject: Re: VC++6.0での文字列の操作について Date: 1999/05/01 Message-ID: <01be93f4$bdeece00$0100a8c0@fmv57d4s6b> X-Deja-AN: 472938124 Content-Transfer-Encoding: 8bit References: <7ga1mu$ivb$1@meshsv230.tk.mesh.ad.jp> Content-Type: text/plain; charset=ISO-2022-JP X-Complaints-To: usenet@news-jp.nifty.ne.jp X-Trace: news-jp1.nifty.ne.jp 925578698 11326 202.219.187.123 (1 May 1999 17:11:38 GMT) Organization: NIFTY SERVE Mime-Version: 1.0 Reply-To: "$BEE;R$N$*?KH"(J" <yueno@kanagawa.hitachi.co.jp> NNTP-Posting-Date: 1 May 1999 17:11:38 GMT Newsgroups: japan.comp.lang.visual-c++,fj.os.ms-windows.programming