C++细节(二):区分数据的类型
来源:互联网 发布:中金交易软件 编辑:程序博客网 时间:2024/06/03 17:15
当时遇到一道判断字符串中数字与字符数量的题,虽然当时是用if((c >= 'a' && a <= 'z' ) || (c >= 'A' && c <= 'Z')) ...和if(c >= '0' && c <= '9') ...的方法解决了问题,但这个方法确实有点笨,后来了解了一些字符检测函数,十分好用,在这里分享给大家:
isdigit(c) c为数字式返回真
isalpha(c) c为字母时返回真
isalnum(c) c为字符或数字时返回真
islower(c) c为小写字母时返回真
isupper(c) c为大写字母时返回真
isspace(c) c为空白符时返回真
isprint(c) c为可打印字符(包括空格‘ ’)时返回真
isgraph(c) c为可打印字符(不包括空格‘ ’)时返回真
ispunct(c) c为出数字、字母、空格之外的可打印字符时返回真
iscntrl(c) c为控制字符(如'\n’、'\f'、‘\v’、‘\a’、‘\b’等)时返回真
这些函数都包含在<ctype>中。
虽然这些函数已经够便利了,但在应用中仍是不足的。比如,我想区分一个数,它是int型还是float型亦或是char型。这时该怎么办呢?以上的函数无法完全解决这个问题。这时,我了解到C++中有一个标识符叫typeid,它包含在<typeinfo>中,我来为大家说明一下用法,如下代码:
int a;
cout << typeid(a).name() << endl;
这时会打印出 i 这个字母,即int的第一个字母,同理,如果是float型的数据的话,会打印出 f ,以下是我的总结:
数据类型 输出字母
int i
float f
char c
long l
string Ss
double d
long double e
short s
char* Pc(pointer char)
int* Pi(pointer int)
bool b
类的typeid(class).name()会随着类的名字和名字的字数发生改变。如:
class M{};
class MN{};
typeid(M).name()输出的结果为 1M ,而typeid(MN).name()输出的结果为 2MN。结构体、枚举和联合体的输出结果与类相同。当然这个标识符对于函数也适用,void类型的函数输出为 FvvE,int类型的函数为 FivE,不同类型的函数输出的值会如上改变,‘F’、‘v’、‘E’不会变,但是有两种函数不一样,构造函数会输出和类一样的值,析构函数则不能使用这个标识符,否则会报错。
其他的指针、向量、bitset之类的输出结果我就不一一累述了。
如果想用if语句来判断数据类型,则应这样写:
int a;
if(*typeid(a).name() == 'i')cout << "Hello" << endl;
else cout << "World" << endl;
这里会在控制台输出 Hello。
以上是在Codeblocks开发环境下的结果,如果是在Visual Studio的开发环境下
int a;
cout << typeid(a).name() << endl;
输出的结果将会是 int,char型的变量会输出char ,float型的变量会输出float,以此类推。
(请注意:typeid().name()这个函数返回的是一个const char*类型的值)
以上为全部内容,希望大家多多支持!
- C++细节(二):区分数据的类型
- 程序猿之---C语言细节16(看了绝对值,编译类型ANSI C和K&R C类型判断,c编译器类型转换bug的细节)
- linux C编程(二)数据与函数的存储类型和内存管理
- 枚举类型的区分
- 细节区分
- objective-c 语法 细节(二)
- 小细节:css中的的大小写区分
- 数据逆向(二)——区分常量、变量、指针
- 编程规范(二)—— 区分代码和数据
- C数据的基本类型
- 字典数据和布尔类型数据的区分,也说下NoSQL数据库的扩展性
- 像机器一样思考(二)—— 数据的细节
- C ++中const指针类型区分技巧
- C程序设计语言之细节(二)
- 一周学会C#(值的类型二)
- 一周学会C#(值的类型二)
- 有章法的学习c++(5)类型转换(二)
- 有章法的学习c++(9)复合类型(二)
- js里面的枚举问题
- 【opencv】opencv编译生成sln的方法
- 动态规划的两种方式
- Android的monkey 基本参数
- python机器学习依赖库安装
- C++细节(二):区分数据的类型
- [linux]linux命令的后台不挂断运行
- redis cluster高可用集群部署详解
- 亿级Web系统搭建:单机到分布式集群
- ETL 数据加载机制概述
- 基于IOLoop的Web Server
- 关于web项目部署到云平台上get方式进行参数传输是中文乱码的问题
- thermal中cool device和zone device的绑定
- SDUT 3376 数据结构实验之查找四:二分查找