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

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

int atoi ( const char * str );

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

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

于 2012-11-04T20:36:53.180 回答
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
           }

附言

如果你想测试字符串而不是字符,这里是示例:链接最好的方法是让函数测试给定的字符串是否为数字,如果它是数字,则返回 true,否则返回 false(或其他方式)

于 2012-11-04T20:48:02.057 回答