WES*_*RUK 8 c++ string integer user-input string-conversion
我写了下面的代码来检查输入(answer3)是一个数字还是字符串,如果它不是一个数字,它应该返回"仅输入数字",但它返回相同的数字.请建议我一个解决方案.
#include <iostream>
#include <string>
#include <typeinfo>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
using namespace std;
int main ()
{
string ques1= "Client's Name :";
string ques2 = "Client's Address :";
string ques3 = "Mobile Number :";
char answer1 [80];
string answer2;
int answer3;
cout<<ques1<<endl;
cin>>answer1;
cout<<ques2<<endl;
cin>>answer2;
cout<<ques3<<endl;
cin>>answer3;
if (isdigit(answer3))
{
cout<<"Correct"<<endl;
}
else
{
cout<<"Enter Numbers Only"<<endl;
}
system("pause>null");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你可以regex这样做:
#include <regex>
bool isNumber(std::string x){
std::regex e ("^-?\\d+");
if (std::regex_match (x,e)) return true;
else return false;}
Run Code Online (Sandbox Code Playgroud)
如果你想创建isNumber()一个可以接受任何类型输入的泛型函数:
#include <regex>
#include <sstream>
template<typename T>
bool isNumber(T x){
std::string s;
std::regex e ("^-?\\d+");
std::stringstream ss;
ss << x;
ss >>s;
if (std::regex_match (s,e)) return true;
else return false;}
Run Code Online (Sandbox Code Playgroud)
上面的isNumber()函数只检查整数,精度(包含点.)的double或float值不会返回true.如果您也想要精度,那么将regex行更改为:
std::regex e ("^-?\\d*\\.?\\d+");
Run Code Online (Sandbox Code Playgroud)
如果您想要更高效的解决方案,请参阅此解决方案.
如果您使用的是C++ 98,则可以使用stringstreams(#include <sstream>):
std::string s = "1234798797";
std::istringstream iss(s);
int num = 0;
if (!(iss >> num).fail()) {
std::cout << num << std::endl;
}
else {
std::cerr << "There was a problem converting the string to an integer!" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
如果您可以使用boost,则可以使用lexical_cast(#include <boost/lexical_cast.hpp>):
std::string s = "1234798797";
int num = boost::lexical_cast<int>(si);//num is 1234798797
std::cout << num << std::endl;
Run Code Online (Sandbox Code Playgroud)
如果C++ 11是提供给你,你可以使用内置std::stoi 函数从<string>:
std::string s = "1234798797";
int mynum = std::stoi(s);
std::cout << mynum << std::endl;
Run Code Online (Sandbox Code Playgroud)
输出:
1234798797
Run Code Online (Sandbox Code Playgroud)