c++刷题常用技巧

记录常用的好用的c++刷题技巧以及方法的库函数
严格遵顼 ANSI-C 标准
技巧
库函数

技巧

库函数


此部分以头文件分类


功能 函数原型
判断一个字符是否是字母或者数字 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

此部分只介绍我认为常用的,都很简单

功能 函数原型
求幂 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 );

  1. 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!”);

  1. 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 *
功能 函数原型
将一个c风格字符串转为浮点型
可识别正负号以及科学计数法
最后一个有效字符之后的字符会被忽略
失败的转换会返回 0.0
double atof(const char * str);
将一个c风格字符串转为整型
可识别正负号
最后一个有效字符之后的字符会被忽略
失败的转换会返回 0
int atoi(con​​st char * str);
将一个c风格字符串转为长整型
可识别正负号
最后一个有效字符之后的字符会被忽略
long int atol(const char * str)

将整数转换为字符串

此库下还有其他常用的诸如 abs(),rand()等,但都是为了兼容c而实现的,有其他更好的替代,这篇博客中也会介绍
malloc(),free()之流不在考虑范围内)


此库中包含了对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对象的基本操作与方法不再介绍,仅记录我认为有用但是不太熟悉的内容

功能 函数原型(成员方法)
清空字符串 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对象成员方法,下面的就是的库函数了(c++11标准

功能 函数原型(库函数)
将字符串转为int(可指定基数,idx参数忽略吧,用处不大) int stoi(con​​st 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标准下的方法,莫要滥用

你可能感兴趣的:(语言深入,刷题技巧,疑难总结)