cctype
头文件:
#include<cctype>
二维数组动态创建与删除
(1)动态创建
思路:先创建行指针,随后为行指针在创建数组,也就是先创建行数组,然后再创建列数组,先纵后横。
1 | char * *ss = new char*[m]; |
(2)动态删除
思路:与创建相反,先释放列数组,再释放行数组
1 | for(int i=0;i<n;i++) |
上述创建的动态数组每行是连续的,但是不同行是不连续的,连续指内存分配。
1 | int **p1 = new int *[x]; |
数组初始化
(1)memset方法
头文件:
#include<string>
说明:
按照字节填充某字符,所以一般memset只能用来填充char型数组,因为(只有char型占一个字节);如果填充int型数组,除了0和-1,其他不能填充,因为只有00000000=0,-1同理,如果我们把数组都填充“1”,则导致编程填充如“11111111”。
使用方法:
1 | char s[n]; |
(2)fill方法
头文件:
#include<algorithm>
说明:
按照单元赋值,将一个区间的元素都赋同一个值。
因此fill函数可以赋值任何,而且使用方法特别简便。*
1 | int a[n] |
(3)两者综述
fill比memset更加简便实用,然而两者都只能给一维数组初始化,二维数组则需要给每一行的行数组循环初始化以达到二维数组初始化的目的。
1 | char * *ss = new char*[n]; |
array
与数组一样,array对象的长度也是固定的,也是用栈,而不是自由存储区,因此其效率与数组相同,但更方便,更安全。
头文件:
#include<array>
1 | array<int,5> ai; |
可以将一个array对象赋值给另一个array变量,这时与数组的区别。
valarray
1 | 头文件: |
pair
标准库模板定了多参数的类pair,可通过first()和second()方法访问其值。
1 | template<class T1,class T2> |
c_str()
1 | 语法: |
大整数类
a.加法
分块加法,继而进位
b.减法
分块减法,继而借位
c.乘法
乘积是逐位相乘,也就是aibj,结果加入到积C的第i+j位,最后处理进位即可
例如:
A =17 = 1×10 + 7 = (7,1)最后是十进制的幂表示法,幂次是从低位到高位,以下同。
B=25 = 2×10 + 5 = (5, 2);
C = A × B = (7 × 5, 1 × 5 + 2 × 7, 1 × 2) = (35, 19, 2) = (5, 22, 2) = (5, 2, 4)=425
d.除法
作减法,最后为余数,减法次数为商
程序:
1 | /* |
效率有待日后再来!
memcpy函数
1 | 函数原型: |
*max_element()和*min_element()
1 | 头文件: |
_itoa,atoi,atof
_itoa
1 | 功能:把一整数转换为字符串 |
程序例:
1 |
|
atoi函数
1 | 原型: |
sscanf和sprintf
1 | ①sscanf |
memset
1 | void * memset(void * s, int ch, size_t n); |
sort()
1 | 头文件: |
to_string()和stoi()
1 | std::string to_string( int value ); (1) (C ++11起) |
MyString
1 |
|
1 |
|
STL的unique去重函数
类属性算法unique的作用是从输入序列中“删除”所有相邻的重复元素。
该算法删除相邻的重复元素,然后重新排列输入范围内的元素,并且返回一个迭代器(容器的长度没变,只是元素顺序改变了),表示无重复的值范围得结束
只是覆盖重复元素而已,而后顺序不变。
1 |
|
结果:123456
注释结果:1234563456
getchar输入,putchar输出
getchar和putchar分别用来输入和输出单个字符
1 | char ch=getchar(); |
gets输入,puts输出
gets用来输入一行字符串(以换行符为结束,与getline类似,但是不将换行符保留在缓冲中),将换行符保留在缓冲中
1 | char str[20]; |
string.h
strlen()
返回字符数组中第一个\0前的字符的个数
1 | char str[10]; |
strcmp()
strcmp函数返回两个字符串大小的比较结果,比较原则是按字典序
strcmp(字符数组1,字符数组2)
①如果字符数组1<字符数组2,则返回一个负整数(不同编译器处理不同,不一定是-1)
②如果字符数组1==字符数组2,则返回0
③如果字符数组1>字符数组2,则返回一个正整数(不同编译器处理不同,不一定是+1)
strcpy()
strcpy函数可以把一个字符串复制给另一个字符串
strcpy(字符数组1,字符数组2)
注:把字符数组1复制给字符数组1,包括\0
1 | char str1[50],str2[50]; |
strcat()
strcat函数可以把一个字符串接到另一个字符串后面
strcat(字符数组1,字符数组2)
注:把字符数组2接到字符数组1后面
1 | char str1[50],str2[50]; |
strchr()
strchr是计算机的一个函数,
原型为extern char * strchr(const char * s,char c),
可以查找字符串s中首次出现字符c的位置。
1 | char str[20]; |
stdio.h
scanf()和printf()
1 | int n; scanf("%d",&n); |
1 | int n; printf("%d",n); |
三种实用的输出格式
%md
设置m字符宽度,不足m位的int型变量以m位进行右对齐输出,其中高位用空格补齐;如果变量本身超过m位,则保持原样。
%0md
与上一不同的地方在于补0而不是空格
%.mf
可以让浮点数保留m位小数输出,四舍五入。
sscanf()和sprintf()
1 | scanf("%d",&n); |
1 | char str[100] = "123"; |
iostream
cin与cout
cin.get()与cin.getline()
两者都是能够读取空格,以换行符为输入结束,而区别是cin.get()会将换行符保留在缓冲中,而cin.getline()自动剔除,
详见《C++ Primer plus》
1 | char str[100]; |