如何识别字符串是否为数字,如果是,则将其转换为int?(C++)

how to identify if a string is a number and if it is, convert it to an int? (C++)

本文关键字:C++ int 转换 数字 何识别 识别 字符串 是否 如果      更新时间:2023-10-16

可能重复:
如何在C++中将字符串解析为int?

我有一个简单的程序,它经常输入数字(几乎是猜谜游戏),但我需要添加一个选项,如果用户键入"help"或"/h"或"?",程序将显示帮助菜单。。。

所以本质上,我需要能够区分输入是字符串还是数字,如果是数字,则将其转换为int…

完成这项工作的最佳方法是什么?我知道我可以使用atoi将字符串转换为int,但如何检查该值是否为数字?

谢谢!

编辑:根据我从你的回答中读到的,你们中的大多数人都说stringstream是最好的方法。。。我编写了一小段代码,试图理解stringstream是如何工作的,但我遇到了一些错误。。。知道为什么吗?

#include <iostream>
#include <string>
using namespace std;
int str2int (const string &str) {
  std::stringstream ss(str);
  int num;
  if((ss >> num).fail())
  { 
      num = 0;
      return num;
  }
  return num;
}
int main(){
    int test;
    int t = 0;
    std::string input;
    while (t !=1){
        std::cout << "input: ";
        std::cin >> input;
        test = str2int(input);
        if(test == 0){
            std::cout << "Not a number...";
        }else
            std::cout << test << "n";
        std::cin >> t;
    }
    return 0;
}

错误:

Error C2079:'ss' uses undefined class std::basic_stringstream<_elem,_traits,_alloc>'
Error C2228: left of '.fail' must have class/struct/union
Error C2440: 'initializing': cannot convert 'const std::string' into 'int'

使用strtol(http://www.cplusplus.com/reference/clibrary/cstdlib/strtol/)而不是atoi。

long int strtol ( const char * str, char ** endptr, int base );

如果成功,则获得一个非零值AND,endptr已移动。如果末端没有移动,你就知道这是一次失败。如果发生故障并且结束指针移动,则会得到一个0,并且在结束指针之前的内存地址是空白。

如果不能执行有效的转换,atoi将返回0。那你就可以应付了。

只需检查您的三种情况,否则,如果任何字符不是数字,请处理,否则转换并继续。

string input;
cin >> input;
if (input == "help" || input == "/h" or input == "?")
    help();
else {
    bool convertible = true;
    for(string::size_type i = 0; i < input.size(); ++i) {
        if (!isdigit((int)input[0])) {
            convertible = false;
            break;
        }
    }
    if (convertible) {
        int digit = atoi(input.c_str());
        // do guessing game stuff
    }
    else {
        // handle
    }
}