1

重複の可能性:
文字列がC ++の数値であるかどうかを判断するにはどうすればよいですか?

私はC++で非常に単純な計算プログラムを作成しました。ここにあります:

#include <iostream>
#include <string>
using namespace std;

int main()
{
   double num1;
   double num2;
   string op;
   double num3;
   int x;
   bool y = false;

   do
   {
      cout<<"Press t to terminate the application"<<endl;

      cout<<"Enter the first number"<<endl;
      cin>>num1;

      cout<<"Enter the operator"<<endl;
      cin>>op;
      cout<<"Enter the next number"<<endl;
      cin>>num2;

      if(op=="/"&&num2==0)
      {
         cout<<"You are attempting to divide by 0. This is impossible and causes the destruction of the universe. However, the answer is infinity"<<endl;
         y = true;
      }

      if(y==false)
      {
         if(op=="+") {
            num3 = num1+num2;
         }
         else if(op=="-") {
            num3 = num1-num2;
         }
         else if(op=="*"||op=="x"||op=="X") {
            num3 = num1*num2;
         }
         else {
            num3 = num1/num2;
         }
         cout<<endl;
         cout<<endl;
         cout<<"Answer:"<<num3<<endl<<endl;
      }
   } while(x!=12);

   return 0;
}

ご覧のとおり、「t」を押してアプリケーションを終了できるようにしたいと思います。これは明らかに機能しませんcin。文字をaに割り当てようとするためdoubleです(「t」を押すと、アプリケーションがクラッシュします)。代わりに文字列を使用して入力を取得することを計画していますが、文字列が文字か数字かをテストするにはどうすればよいですか?

4

4 に答える 4

4
#include <cctype>

文字列の内容isalhpa()に , isdigit(),を使用しますか?isalnum()

于 2012-11-04T20:30:52.527 に答える
1

これがサンプルと実際のコードです。必要に応じて変更してください

#include <iostream>
#include <string>
#include <cctype>
#include <stdlib.h>

using namespace std;

bool isNum(char *s) {
    int i = 0,  flag;

    while(s[i]){
            //if there is a letter in a string then string is not a number
        if(isalpha(s[i])){
            flag = 0;
            break;
        }
        else flag = 1;
        i++;
        }
    if (flag == 1) return true;
    else return false;
}


int main(){
    char stingnum1[80], stringnum2[80];
    double doublenum1, doublenum2;
    cin>>stingnum1>>stringnum2;
    if(isNum(stingnum1) && isNum(stringnum2)){
        doublenum1 = atof(stingnum1);
        doublenum2 = atof(stringnum2);
        cout<<doublenum1 + doublenum2 << endl;
    } 
    else cout<<"error";

   return 0;
}
于 2012-11-04T21:24:56.807 に答える
0

「t」をチェックするだけなら、ばかげた簡単な方法で行うことができます。

     if(stringnum1== 't' || stringnum2== 't') {

            //terminate
       }
 else {
           doublenum1 = atof(stringnum1)
           doublenum2 = atof(stringnum1)
           // your math operations
           }

より良い方法は次のとおりです。

if(isalhpa(stringnum1) || isalpha(stringnum2)){
                 //terminate
           }
      else {
           doublenum1 = atof(stringnum1)
           doublenum2 = atof(stringnum2)
           // your math operations
           }

PS

char ではなく文字列をテストする場合、ここにサンプルがあります:リンク最良の方法は、指定された文字列が数値であるかどうかをテストする関数を作成し、数値の場合は true を返し、そうでない場合は false を返す (またはその逆)

于 2012-11-04T20:48:02.057 に答える
0

文字列に入力してから、次の関数を使用できます。

int atoi ( const char * str );

文字列が数値の場合、整数に変換されます。

文字列が数値でない場合は 0 を返します。この場合、文字列の最初の文字のみを確認できます。ゼロの場合は、入力を 0 と見なします。最初の文字がゼロでない場合は、文字列を考慮します。数値ではありません。

于 2012-11-04T20:36:53.180 に答える