C++中判断数据的类型
在实际的项目中经常要进行数据类型的转换,特别是字符串转成数字或者数字转字符串,而在进行数据类型转换之前要先知道数据的类型。
这时如何判断一个数据的数据类型这个问题就自然而然的遇到了。在本人几次遇到这个问题的情况下,这次来做一个总结。
1.typeid
typeid这个函数在头文件typeinfo.h中,在使用这个函数时要加上头文件:#include。但是本人在C++14下不加头文件可以,可能是C++将它写入了标准库里面。
#include
using namespace std;
int main(){
auto a = 10;
if(typeid(a) == typeid(int)){
cout << “a的数据类型是:整型” << endl;
}
auto str1 = “Hello World”;
auto str2 = "Hello World"s;
if(typeid(str1) == typeid(const char*)){
cout << “str1的类型是:const char*” << endl;
}
if(typeid(str2) == typeid(string)){
cout << “str2的类型是:string” << endl;
}
}
这里值得注意的是str1的类型,在通常情况下,字符串的字面量的类型是const char*,可以通过用户自定义的类型将字符串字面量转换为string。即在字符串的后面加‘s’。
2.cin判断输入的数据
在标准输入时有时要判断输入的数据是否与定义的数据类型一致。这时可以使用cin.good()或者cin.fail()函数来判断是否出错。
#include <iostream>
using namespace std;
int main(){
int a;
cout << "请输入一个整数:";
cin >> a;
if(cin.good()){
cout << "输入符合标准:" << a << endl;
}
else{
cout << "输入的不是整数." << endl;
}
}
如果出错了还要重新输入的话,需要用到cin.clear()函数来将错误位清除。
int v1;cin >> v1;
if (cin.fail())//如果输入的不是整形
{
cin.clear();//把整形缓存清除
string x; cin >> x;//把string类型的传入进来找到对应编号
v1=G.locatenum(&G, x);
}