家・車以外で、人生で一番奮発した買い物

VC++6.0 MFCです。

CString についてなのですが、
  
キーボードで入力した文字(数字0~9、少数点.)を使って処理をしたいのですが、
キーボードで入力された文字の中にアルファベットなど、数字以外の文字が入っていた場合を
識別したいのですが、どのような方法がありますでしょうか?

下記のようにCString型 → doubl型にキャストして、数字だった場合は大小判定を
して処理するのですが、アルファベットなどがある場合 double mojiDO = 0 に
なってしまい、処理を初めてしまいます。

(1)数字とアルファベットなど数字以外の文字の混合はNG。(例"100gあ"はNG)
(2)符号付の数字NG("-0.98"はNG)

CString moji;//キーボード入力された文字が入っています。
double mojiDO = atof(moji);//CString型 → double型にキャスト
if (mojiDO >= 0 && mojiDO <= 500 ){
//処理A
}

else if{
//処理B
}

A 回答 (1件)

CString moji;//キーボード入力された文字が入っています。


char *e;
double mojiDO = strtod(moji, &e);//CString型 → double型に変換
if (*e == '\0') {//条件(1)チェック
  if (mojiDO >= 0) {//条件(2)チェック
    if (mojiDO <= 500) {
      //処理A
    } else if(....) {
      //処理B
    }
  }
}

最低限こんな感じで動くのでは?
(2)については、他にも処理の仕方あると思いますけど…。
(先頭がハイフンだったら処理しない、とか)

参考URL:http://www9.plala.or.jp/sgwr-t/lib/strtod.html

この回答への補足

条件に大文字の数字もNG
と書き忘れてしまったのですが、大文字の数字についても、期待通りの結果が得られました。

補足日時:2007/03/20 16:58
    • good
    • 0
この回答へのお礼

yukika-37さんありがとうございます。

期待する動作が得られました。
strtod()はatof()と違い文字列中に変換不可能な文字があった場合には、
その文字列のポインタを得られるのですね。
  
とても勉強になりました。

お礼日時:2007/03/20 16:57

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

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


おすすめ情報

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