测试字符串是数字还是字符

时间:2012-11-04 20:28:26

标签: c++ calculator

  

可能重复:
  How to determine if a string is a number with 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会尝试为double分配一个字母(如果我按't'应用程序崩溃)。我打算用字符串来获取输入,但是我如何测试字符串是字母还是数字?

4 个答案:

答案 0 :(得分:4)

#include <cctype>

并对字符串内容使用isalhpa()isdigit()isalnum()

答案 1 :(得分: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;
}

答案 2 :(得分:0)

您可以输入一个字符串,然后使用以下函数:

int atoi ( const char * str );

如果字符串是数字,则会将其转换为整数。

如果字符串不是数字,它将返回0:在这种情况下,您只能检查字符串的第一个字符,如果它为零,则将输入视为0.如果第一个字符不是零认为字符串不是数字。

答案 3 :(得分: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
           }

P.S。

如果你想测试字符串而不是char,这里是样本:link最好的方法是使函数测试给定的字符串是否为数字如果是数字返回true,否则返回false(或其他方式)