一.string字符串
看到两个方法,
方法一:使用C++提供的stringstream对象
#include <iostream>
#include <string>
#include <sstream> //包含这个类
using namespace std;
bool isnum(string s)
{
stringstream sin(s);
double t;
char p;
if(!(sin >> t))
/*解释:
sin>>t表示把sin转换成double的变量(其实对于int和float型的都会接收),如果转换成功,则值为非0,如果转换不成功就返回为0
*/
return false;
if(sin >> p)
/*解释:此部分用于检测错误输入中,数字加字符串的输入形式(例如:34.f),在上面的的部分(sin>>t)已经
接收并转换了输入的数字部分,在stringstream中相应也会把那一部分给清除(数字清除),如果此时传入字符串是数字加字符串
的输入形式,则此部分可以识别并接收字符部分,例如上面所说的,接收的是.f这部分(抛弃数字),所以条件成立,返回false;
如果剩下的部分不是字符,那么则sin>>p就为0,则进行到下一步else里面
*/
return false;
else
return true;
}
int main()
{
string s;
while(cin >> s)
{
if(isnum(s))
cout << s << " is a number." << endl;
else
cout << s << " is not a number." << endl;
}
}
方法二:
判断字符的ASCII范围(数字的范围为48~57)
#include <iostream>
using namespace std;
bool AllisNum(string str);
int main( void )
{
string str1 = "wolaiqiao23";
string str2 = "1990";
if (AllisNum(str1))
{
cout<<"str1 is a num"<<endl;
}
else
{
cout<<"str1 is not a num"<<endl;
}
if (AllisNum(str2))
{
cout<<"str2 is a num"<<endl;
}
else
{
cout<<"str2 is not a num"<<endl;
}
cin.get();
return 0;
}
bool AllisNum(string str)
{
for (int i = 0; i < str.size(); i++)
{
int tmp = (int)str[i];//显示转换为int型
if (tmp >= 48 && tmp <= 57)
{
continue;
}
else
{
return false;
}
}
return true;
}
二.对于char字符
bool isNumber(char * str) {
using namespace std;
if (str == NULL)
return false;
int len = strlen(str);
if (len == 0)
return false;
bool isaNumber = false;
char ch;
for (int i = 0; i < len; i++) {
if (i == 0 && (str[i] == '-' || str[i] == '+'))
continue;
if (isdigit(str[i])) {//isdigit是自带的一个判断是否是数字的函数
isaNumber = true;
} else {
isaNumber = false;
break;
}
}
return isaNumber;
}