在将字符串转换为int之前检查字符串是否不是数字

时间:2014-01-22 02:08:04

标签: c++

我有一个终端应用程序,用户输入将其存储在字符串中,然后将其转换为int。问题是如果用户输入任何不是数字的内容,则转换失败并且脚本继续而没有任何迹象表明该字符串尚未转换。有没有办法检查字符串是否包含任何非数字字符。

以下是代码:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main ()
{
  string mystr;
  float price=0;
  int quantity=0;

  cout << "Enter price: ";
  getline (cin,mystr); //gets user input
  stringstream(mystr) >> price;  //converts string: mystr to float: price
  cout << "Enter quantity: ";
  getline (cin,mystr); //gets user input
  stringstream(mystr) >> quantity; //converts string: mystr to int: quantity
  cout << "Total price: " << price*quantity << endl;
  return 0;
}

在转换之前:stringstream(mystr) >> price;如果字符串不是数字,我希望它在控制台上打印一行。

3 个答案:

答案 0 :(得分:3)

通过检查输入流的int位,您可以查看fail()的读取是否成功:

getline (cin,mystr); //gets user input
stringstream priceStream(mystr);
priceStream >> price;
if (priceStream.fail()) {
    cerr << "The price you have entered is not a valid number." << endl;
}

Demo on ideone.

答案 1 :(得分:0)

如果你想检查价格用户输入是否是浮点数,你可以使用boost::lexical_cast<double>(mystr);,如果它抛出异常,那么你的字符串不是浮点数。

答案 2 :(得分:0)

它会为你的代码添加一些内容,但你可以用cctype中的isdigit解析mystr。库的功能是here。如果字符串中的字符不是数字,则isdigit(mystr [index])将返回false。