C++ 干净字符串到 int 强制转换

C++ Clean String to int cast

本文关键字:转换 int 字符串 C++      更新时间:2023-10-16

我所知,在 c++ 中将字符串转换为 int 的常用方法是使用 sstream:

   std::string inputString = "12 34";
   std::istringstream istr(inputString);
   int i1, i2;
   istr >> i1 >> i2;

但是,如果我想确保我的代码适用于任何输入,问题是在字符串的输入或 0 之间做出决定:

   std::string inputString = "TEXT 0";
   std::istringstream istr(inputString);
   int i1, i2;
   istr >> i1 >> i2;
   cout << i1 <<"  !=  "<< i2 << endl;

我想决定用户是否输入了字符串或零,以便执行进一步的操作。有没有一种干净的方法来解决这个问题,而不使用词汇强制转换或 atoi?最好的格加德

您可以使用无效的默认值:

#include<sstream>
#include<limits>
using std::numeric_limits;
int main(){
    std::string inputString = "TEXT 0"; 
    std::istringstream istr(inputString);
    int i1=numeric_limits<int>::min();
    int i2=numeric_limits<int>::min(); 
    std::string tmp;
    istr >> i1;
    if (i1 == numeric_limits<int>::min()) {
      // extraction failed
      i1 = 0;
      istr.clear(); // clear error flags to allow further extraction
      istr >> tmp; // consume the troublesome token
    }
    // same for i2
}

注意:如果numeric_limits<int>::min()不能是有效输入,则该技术有效