アプリ版:「スタンプのみでお礼する」機能のリリースについて

環境 WIN98 VC++6.0 MFC にて

”あああ,いい,うえお”
のようにカンマで区切った文字列を

”あああ” と ”いい” と ”うえお”
のように取り出し変数に格納したいのですが、どのようにすれば良いのでしょうか?

MFCの便利な関数があればお教えください。

A 回答 (3件)

先の方達の回答に補足します。



strtok で要件を満しますし、私も strtok 使うと思います。
ただ、これちょっと癖が有ります。
strtok は走査したバッファの内容を書き換えてしまいます。

例えば

  char* pszToken = NULL;
  char szBuff[] = "あああ,いい,うえお";
(実際は終端 \0 が在り "あああ,いい,うえお\0" となっている)

  pszToken = strtok(szBuff, ",");

この時 szBuff の内容は "あああ\0いい,うえお\0" となり、
pszToken は "あああ" の部分の先頭を指します。
(szBuff の0バイト目)

  pszToken = strtok(NULL, ",");

第1引数 NULL は前回の strtok の続きをやる、という意味です。
2回目で szBuff の内容は "あああ\0いい\0うえお\0" となり、
pszToken は "いい" の部分の先頭を指します。
(szBuff の7バイト目)

  pszToken = strtok(NULL, ",");

3回目は szBuff の内容が "あああ\0いい\0うえお\0" のままです。
(元々在った終端 \0 に上書きしているのかも知れませんが)
pszToken は "うえお" の部分の先頭を指します。
(szBuff の12バイト目)

  pszToken = strtok(NULL, ",");
4回目は szBuff の内容は変わらず、
pszToken には NULL が返ります。
(#2さんのように、これで切り分け処理終了のロジックを書きます)


なので、元々の szBuff[] = "あああ,いい,うえお" というデータを
後でまた使いたい可能性が有るなら、strtok には別領域にコピーした
物を渡すようにしましょう。


尚、対象となるデータを CString で保持している場合は、そのまま
では渡せないので GetBuffer で内容書き換え可能なポインタを取得
するか、充分な大きさの char 配列や new 等で必要サイズ確保した
領域にコピーした物を使います。
    • good
    • 0
この回答へのお礼

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

#1のお礼の欄に書いておきましたサイトでも、同様のことが図解入りで書いてありましたので、大変良く分かりました。

お礼日時:2003/09/30 07:14

strtokで


char*p;
chara[] = "あああ,いい,うえお";
char*b[3];
inti = 0;

for( p = strtok(a, ","); p != NULL; p = (strtok(NULL, ",")) ){
b[i] = p;
i++;
}

で、いいだけでは?。
char*でポインタ位置をとっているだけなので、
その点は気を付けてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/09/30 07:07

strtok()で十分かもしれません。

    • good
    • 0
この回答へのお礼

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

strtok()で検索したら、大変分かりやすい以下が見つかりました。
http://www9.plala.or.jp/sgwr-t/lib/strtok.html

お礼日時:2003/09/30 07:04

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