记录常用的好用的c++刷题技巧以及方法的库函数
严格遵顼 ANSI-C 标准
技巧
库函数
技巧
库函数
此部分以头文件分类
<cctype>
功能 | 函数原型 |
---|---|
判断一个字符是否是字母或者数字 | int isalnum ( int c ); |
判断一个字符是否是一个字母 | int isalpha ( int c ); |
判断一个字符是否是一个控制字符 | int iscntrl ( int c ); |
判断一个字符是否是一个十进制数字 | int isdigit ( int c ); |
判断一个字符是否是一个可视字符(不是空白字符或控制字符) | int isgraph ( int c ); |
判断一个字符是否是一个小写字母 | int islower ( int c ); |
判断一个字符是否是一个大写字母 | int isupper ( int c ); |
判断一个字符是否是可打印的 | int isprint ( int c ); |
判断一个字符是否是标点符号 | int ispunct ( int c ); |
判断一个字符是否是空白字符 | int isspace ( int c ); |
判断一个字符是否是十六进制数字 | int isxdigit ( int c ); |
将一个字母转换为大写 | int toupper ( int c ); |
将一个字母转换为小写 | int tolower ( int c ); |
上述函数函数原型中,返回值均为 int 类型
判断作用的函数返回 true(1) 或 false(0)
转换作用的返回转换后的 ascii 码
下面贴出来部分函数的取值对照表,打×表示在此输入下函数返回true
ASCII values | characters | iscntrl | isspace | isupper | islower | isalpha | isdigit | isxdigit | isalnum | ispunct | isgraph | isprint |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0x00 … 0x08 | NUL, (other control codes) | x | ||||||||||
0x09 … 0x0D | (white-space control codes: ‘\t’,’\f’,’\v’,’\n’,’\r’) | x | x | |||||||||
0x0E … 0x1F | (other control codes) | x | ||||||||||
0x20 | space (’ ') | x | x | |||||||||
0x21 … 0x2F | !"#$%&’()*+,-./ | x | x | x | ||||||||
0x30 … 0x39 | 01234567890 | x | x | x | x | x | ||||||
0x3a … 0x40 | :;<=>?@ | x | x | x | ||||||||
0x41 … 0x46 | ABCDEF | x | x | x | x | x | x | |||||
0x47 … 0x5A | GHIJKLMNOPQRSTUVWXYZ | x | x | x | x | x | ||||||
0x5B … 0x60 | []^_` | x | x | x | ||||||||
0x61 … 0x66 | abcdef | x | x | x | x | x | x | |||||
0x67 … 0x7A | ghijklmnopqrstuvwxyz | x | x | x | x | x | ||||||
0x7B … 0x7E | {|}~ | x | x | x | ||||||||
0x7F | (DEL) | x |
<cmath>
此部分只介绍我认为常用的,都很简单
功能 | 函数原型 |
---|---|
求幂 | double pow ( double base, double exponent ); |
long double pow ( long double base, long double exponent ); | |
float pow ( float base, float exponent ); | |
开方 | double sqrt ( double x ); |
float sqrt ( float x ); | |
long double sqrt ( long double x ); | |
向上取整 | float ceil ( float x ); |
double ceil ( double x ); | |
long double ceil ( long double x ); | |
向下取整 | double floor ( double x ); |
float floor ( float x ); | |
long double floor ( long double x ); | |
取绝对值 | double fabs ( double x ); |
float fabs ( float x ); | |
long double fabs ( long double x ); | |
取余数 | double fabs ( double x ); |
float fabs ( float x ); | |
long double fabs ( long double x ); |
<cstdio>
-
printf()
这是一个格式化输出函数,通过占位符实现格式化输出
格式化占位符格式为%[flags][width][-precision][length]specifier 即 %[标识符][宽度][精度][长度]格式字符 []包裹的为可选参数,其余为必须参数->(%specifier)是最小形式
flags标识符 作用 - 左对齐(默认右对齐) + 显示正负号(默认仅负号显示) (空格) 如果没有写入任何符号,则在该值前插入一个空格(没看懂) # 与o、x、X、一起使用,显示进制标识符0、0x、0X
与e、E、f一起使用,强制显示小数点?
与g、G一起使用时结果与e、E一起使用相同,但是尾部的零不会被移除0 使用零作为填充字符而不是空格(参考width) width宽度 作用 (数字) 要输出的字符的最小数目(宽度),若输出短于该值,以空格填充,若长于该值,按原字符输出 * 宽度在format字符串中未指定,但是会作为附加整数值参数放置于要被格式化的参数之前(没看懂) .precision精度 作用 .number 对于整数说明符(格式字符),指定了要写的数字的最小位,如果短于该值,用前导零填充,否则按原字符输出,精度为0意味着不写入任何字符。
对于 e、E 和 f 说明符:要在小数点后输出的小数位数。
对于 g 和 G 说明符:要输出的最大有效位数。
对于 s: 要输出的最大字符数。默认情况下,所有字符都会被输出,直到遇到末尾的空字符。
对于 c 类型:没有任何影响。
当未指定任何精度时,默认为 1。如果指定时不带有一个显式值,则假定为 0.length(长度) 作用 我觉得这个没用 裂开 格式字符 作用 d 以十进制形式输出带符号整数(正数不输出符号) o 以八进制形式输出无符号整数(不输出前缀0) x,X 以十六进制形式输出无符号整数(不输出前缀Ox) u 以十进制形式输出无符号整数 f 以小数形式输出单、双精度实数 e,E 以指数形式输出单、双精度实数 g,G 以%f或%e中较短的输出宽度输出单、双精度实数 c 输出单个字符 s 输出字符串 p 输出指针地址 lu 32位无符号整数 llu 64位无符号整数
除此之外,printf()
也可以直接打印信息
printf(“hello world!”);
-
scanf()
int scanf(const char *format, ...);
该函数根据传入的format字符串为格式进行读取,读取的结果保存在后续传入的引用参数中format 的形式有:
(只介绍常用的)类型 对应输入 对应参数类型 %a、%A 读入一个浮点值(仅 C99 有效)。 float *
%c 单个字符:读取下一个字符。如果指定了一个不为 1 的宽度 width,函数会读取 width 个字符,并通过参数传递,把它们存储在数组中连续位置。在末尾不会追加空字符。 char *
%d 十进制整数:数字前面的 + 或 - 号是可选的。 int *
%e、%E、%f、%F、%g、%G 浮点数:包含了一个小数点、一个可选的前置符号 + 或 -、一个可选的后置字符 e 或 E,以及一个十进制数字。两个有效的实例 -732.103 和 7.12e4 float *
%s 字符串。这将读取连续字符,直到遇到一个空格字符(空格字符可以是空白、换行和制表符)。 char *
<cstdlib>
功能 | 函数原型 |
---|---|
将一个c风格字符串转为浮点型 可识别正负号以及科学计数法 最后一个有效字符之后的字符会被忽略 失败的转换会返回 0.0 | double atof(const char * str); |
将一个c风格字符串转为整型 可识别正负号 最后一个有效字符之后的字符会被忽略 失败的转换会返回 0 | int atoi(const char * str); |
将一个c风格字符串转为长整型 可识别正负号 最后一个有效字符之后的字符会被忽略 | long int atol(const char * str) |
将整数转换为字符串
此库下还有其他常用的诸如 abs(),rand()
等,但都是为了兼容c而实现的,有其他更好的替代,这篇博客中也会介绍
(malloc(),free()
之流不在考虑范围内)
<cstring>
此库中包含了对c风格字符串的操作,但是c++中的string类型要更加方便,因此这里只是简单的提一下常用的部分
功能 | 函数原型 |
---|---|
复制字符串(包含终止空字符) | char * strcpy ( char * destination, const char * source ); |
复制字符串中前num个字符 若源字符不够,以零填充 若目标存储长度不够,会截断并且不会写入空字 | char * strncpy ( char * destination, const char * source, size_t num ); |
向目标字符串追加新字符串(重置空字符位置) | char * strcat ( char * destination, const char * source ); |
向目标字符串中追加新字符串中前num个字符(到终止空字符为止) | char * strncat ( char * destination, char * source, size_t num ); |
返回字符串的长度(不包括空字符) | size_t strlen ( const char * str ); |
<string>
string对象的基本操作与方法不再介绍,仅记录我认为有用但是不太熟悉的内容
功能 | 函数原型(成员方法) |
---|---|
清空字符串 | void clear(); |
判断字符串是否为空 | bool empty ( ) const; |
替换字符或子字符串 | replace() 重载太多了!总之就是你能想到的基本都有!具体查阅文档吧 |
交换(用目标字符串内容交换this字符串内容) | void swap (string& str); |
取子字符串(可指定起始位置与截取长度) | string substr (size_t pos = 0, size_t len = npos) const; |
查找字符或子字符串 | find() 重载也不少,看文档吧,这小地方解释不清楚 |
字符串比较 | compare() 同上,裂开 |
getline()
方法就不介绍了,我不信有人不会用
另外上面的都是string对象成员方法,下面的就是<string>
的库函数了(c++11标准)
功能 | 函数原型(库函数) |
---|---|
将字符串转为int(可指定基数,idx参数忽略吧,用处不大) | int stoi(const string&str,size_t * idx = 0,int base = 10) |
将字符串转为float(忽略idx参数吧) | float stof(const string&str,size_t * idx = 0); |
将字符串转为double(忽略idx参数吧) | double stod (const string& str, size_t* idx = 0); |
将其他类型转为字符串 | string to_string (int val); |
string to_string (long val); | |
string to_string (long long val); | |
string to_string (unsigned val); | |
string to_string (unsigned long val); | |
string to_string (unsigned long long val); | |
string to_string (float val); | |
string to_string (double val); | |
string to_string (long double val); |
要注意上面这几个是c++11标准下的方法,莫要滥用