• ベストアンサー

CString にいれた値で"0"以外の数字があればメッセージを出したい

CString にいれた値で"0"以外の数字があればメッセージを出したい お世話になります。 VC++6.0 MFCで開発しております。 CString atai; atai=kazu; ※kazuには不特定桁の数字が入っております。 if(ataiに"0"以外の数字がひとつでもあれば真) メッセージ としたいのですが、どのようにすれば、ataiの中の文字から0以外の数字がひとつでもあることを見つけれるでしょうか?? ※"0"があるかないかを調べたいのではなく、"0以外の"数字があるかないかを調べたいのです。 お手数ですが何卒よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8525/19377)
回答No.1

「atai、kazuには0~9以外の文字が入らない」と言う前提で「0以外の数字が一つ1以上ある」=「すべて0、の逆」=「_ttoi(atai)が0じゃない」って事? だったら if (_ttoi(atai)) { メッセージ } でOK。

関連するQ&A

  • CStringの中から数字だけの場合と、その他が含まれる場合を識別する方法

    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 }

  • CString 大量連結

    VC++6.0のMFCで開発してます。 プログラム内で CString str; str += ○○ とやって連結し終わった後にstrを使って 処理をする所があって試した所すごく遅く、文字列がかなり 長いと固まってしまいます。調べたらCStringの大量連結は パフォーマンスががた落ちって書いてありました。 何か良い方法はないでしょうか? ※連結は必須です。

  • キャストについて str = (CString*)("999") ;

    環境 WIN98 VC++6.0 MFC にて いつもお世話になります。 先日質問したばかり(QNo.682705)なのですが、やはり納得できないことがあるのでお願いします。 分かっている人からみれば、おかしな疑問と思われるかも知れませんが、私にとっては素朴に疑問が生じてしまいます。 *************************** 以下2つのコードのうち、<A>は文法的にOKで<B>がNGな理由が知りたいです。 <A> CString* str ; str = (CString*)m_array.GetAt(i) ; //OK <B> CString* str ; str = (CString*)("999") ; //NG <A>は、m_arrayの要素にCString*を入れていて、初めて成り立つ式です。 と教わりましたが、むしろ私にはCString*以外が入っているため、CString*のキャストしていると思える。 CString*が入っているのなら、キャストする必要は無いのではないでしょうか? ネット上で見つけたコードなため、実際の値やm_arrayの宣言がどうなっているかは確認出来ません。 そして、<A>がおかしなコードでは無いという大前提にたつと、<A>は別の表現をすると <A> str = (CString*)(CString*以外のポインタ) ; となります。 そうすると<B>のコードも、"999"は999の文字列が入っているアドレスを指すポインタであるという考えが正しいとすると、 <B> str = (CString*)(999をさすポインタ) ; となり、おかしなコードではないと思えるのですが、考え方のどこがおかしいのでしょうか? ************************** 以下のことを教わった上であえて聞いています。 str = (CString*)("999"); は、リテラル文字列をつっこもうとしています。 リテラル文字列とCStringはまったく別物です。

  • MFCのCStringについて

    MFCで、CStringをメンバとして含むクラスと、このクラスのオブジェクトを動的に生成して値を代入し、生成したオブジェクトへのポインタを返す関数を以下のように定義しました。 class Record { public:  long Id;  CString Str; }; Record* CreateRecord(long Id_in, CString Str_in) {  Record* ret;  if ((ret = (Record*)malloc(sizeof(Record))) == NULL) {   return NULL;  }  ret->Id = Id_in; // (1)  ret->Str = Str_in; // (2)  return ret; } この関数のコンパイルはうまくいきますが、関数実行時にメモリ参照エラーとなります。 調べてみると、(1)のlong型変数への代入はうまくいっているのですが、(2)のCString型変数への代入がうまくいっていないようです。 既にインスタンス化されているRecord型オブジェクトへのポインタを受け取り、それに代入するという関数であればうまく動きました。 (例) void SetRecord(Record* received, long Id_in, CString Str_in) {  received->Id = Id_in;  received->Str = Str_in; } 先に示したCreateRecord関数は、どこが良くないのでしょうか。

  • ある特定の数字に対する正規表現

    例えばですが、 $aには、変動する数字が代入されているとします。 【$aが、2000で割り切れる値であるとき、真を返す】 もしくは、 【下4桁が、2000・4000・6000・8000・0000のいずれかであるならば、真を返す】 としたい場合には、どのようなソースになりますか? ご教授お願いいたします。

    • ベストアンサー
    • Perl
  • CStringの文字列検索&抜き出しについて

    お世話になります。 ///////////開発環境/////////// 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言語関数 は避けたいのですが、何かいい案ありますでしょうか?? ご教示宜しくお願いいたします。

  • 有効数字と誤差率

    初歩的な質問で恐縮ですが、調べても良く分かりませんでした。 次のような場合、有効数字はどのようになるのでしょうか。 例)真の値が1.50、測定値1.55(有効数字3桁)のとき、 誤差ε=1.55-1.50   =0.05 質問1 引き算のときは、このように桁落ちが発生するので気をつけよ、とまでは書いてあるのですが、どう気をつけるのでしょうか? 有効数字は1桁になってしまったということなのか、5.00×10^2と言う風に3桁に直しておきなさいと言うことなのでしょうか? 質問2 誤差率を求める場合、 誤差率=(0.05/1.50)×100%    =3.333・・・% 質問1の結果によりますが、この場合、何桁で書くのだ正しいですか? 有効数字1桁でしたら、3% 有効数字3桁でしたら、3.33% の、どちらかだと思うのですが。 宜しくお願いします。

  • VC++2008にてdouble型の置換について

    現在VC++2008をMFCにて開発しております。VC++は初心者です。 画面から入力される値(小数点以下有り)を ファイル名として利用し出力する為 小数点とマイナスを特定の文字列に置換する処理をおこなっております。 画面から入力される値(CString)をそのままatof変換し、 double型で取得しますと 「3000.00000」のような値になってしまいます。 「3000.10100」のような値も入力される可能性があるので 一慨に小数点以下を丸める事もできません。 そういった事を考慮しますと、どういった処理が考えられるでしょうか? ご教授頂ければ幸いです。

  • 測定と有効数字(乗除の場合)

     測定には必ず誤差を伴います。そこで有効数字の指導は次のようにすべきだと考えますがいかがでしょうか。 【例】A5判(縦 21.0 cm,横 14.8 cm)の紙の面積は? 〈解答〉縦・横とも±0.1 cmの誤差があると考えられるので (20.9×14.7)cm²≦真の値≦(21.1×14.9)cm² 307.23 cm²≦真の値≦314.39 cm² したがって信頼できるのはせいぜい一の位までであるから 求める面積は 21.0×14.8=310.80≒311(cm²) 以上からわかることは,縦・横とも有効数字 3 桁なので, 答えも有効数字 3 桁で求めることである。

  • 数字探索について、プログラムかフローチャートを教えてください(>_<)

    数字探索について、プログラムかフローチャートを教えてください(>_<) 使用するアプリケーションはMicrosoftOffice2007-ExcelのVisualBasicです。 5桁の数字500個の中から、指定した数字があるかどうかを探索したいと思ってます。 2つ以上の位で、値が一致したときに、その数字を表示したいです。 ※数字について、"40"のように、5桁に満たない数字は、"00040"と、"0"を前に付けています。 Ex. 探索する数字:"04256" 探索される数字↓↓ 46025……一致する位なし 74596……2桁一致 02256……4桁一致 34210……2桁一致 よって、メッセージボックスには 「2桁一致は」 「74596」 「34210」 「3桁一致はありませんでした」 「4桁一致は」 「74596」 「完全一致はありませんでした」 のように表示させたいと思っています。 フローチャートさえ書ければ、あとは試行錯誤、自分で頑張ってみるので、フローチャートだけでも、一緒に考えて頂けませんか。 お手数ですが、お力添え願いますm(__)m