一维数组
类型名 数组名[元素个数];
类型名 数组名[]={};
类型名 数组名[元素个数]={};
- 定义数组就是定义了一段连续的空间,数组名即存放的是数组的首地址,通过下标变量来访问数组中的元素。
- 一维数组的映像:
a[0] |
---|
a[1] |
a[2] |
a[3] |
… |
- 数组的下标越界是很危险的事,C++编译器不会检测数组访问是否越界,不会对越界进行报错。
- 定义的数组的大小为数组的配置长度,真正使用的部分为数组的有效长度。
C++11访问数组
int a[]={1,2,3,4,5};
for(int x : a) cout<<x<<endl;
二维数组
类型名 数组名[行数][列数];
类型名 数组名[行数][列数]={};
- 对每行的部分元素赋值。ex:
int a[3][4]={{1,2},{3,4},{5}};
- 二维数组的引用和以为数组类似。
- 二维数组的内存映像:
a[0][0] |
---|
a[0][1] |
a[1][0] |
a[1][1] |
a[2][0] |
… |
字符串
char a[]={'h','e','l','l','o','/0'};
char a[]={"hello"};
char a[]="hello";
- 数组长度是字符数+1,因为最后有一个’/0’
- 不含有任何字符的字符串为空字符串,用一对双引号表示""。空字符串占用一字节空间,其中储存了一个’/0’
字符的输入输出
- 逐个字符的输入输出,和一般数组一样
- 将字符串一次性地用cin,cout的>>和<<输入输出
- 通过cin.getline或getline输入
cin.getline(ch,length,'结束标识符');
string
string str1;
string str2="";
string str3=("");
string str4=str1;
常用函数
#include<cstring>
getline(流对象,字符串,结束标记符);
length,size//取字符串的长度;
string &erase(int start = 0, int n = end);//删除start至end-1的n个字符,返回修改后的字符串
string &replace(int start, int end,const char *str, int n);//删除start至end-1的n个字符,然后在start处插入字符串str的前n个字符
string &insert(int start1,const string &str, int start2, int n);//在start1位置插入字符串s中start2开始的前n个字符
string &append(const char *s);//把s连接到当前字符串的结尾
string &operator +=(const string &s);//把s连接到当前字符串的结尾
int compare(int start1, int n,const string &s,int start2,int n2)const;//比较当前字符串从start1开始的n个字符组成的字符串与s中start2开始
char &at(int n); //operator[]和at()均返回当前字符串中第n个字符的位置
string substr(int start = 0, int n = num) const; // 返回start开始的num个字符组成的字符串
int copy(char *s, int n, int start = 0) const;//把当前串中以start开始的n个字符拷贝到以s为起始位置的字符数组中,返回实际拷贝的数目
int capacity() const; //返回当前容量(即string中不必增加内存即可存放的元素个数)
bool empty() const;//当前字符串是否为空
void resize(int len, char c); //把当前字符串大小置为len,如果len比原字符串小,则从后面开始截断,如果比原字符串大,用字符c填充不足的部分。
strcpy(dst,src);//将字符串从scr复制到dst,返回dst的地址。dst必须为字符数组
strncpy(dst,scr,n);//至多从scr赋值n个字符到dst,返回dst的地址。dst必须为字符数组
strcat(dst,scr);//将scr拼接到dst后,返回dst的地址
strncat(dst,n);//从scr至多取n个字符【i能接到dst后,返回dst地址
strlen(s);//返回s的字符个数
strcmp(s1,s2);//比较s1,s2.>返回正值,=返回0,<返回负值
strncmp(s1,s2,n);//与strcmp类似,但至多比较n个字符
strchr(s,ch);//返回指向s中第一次出现ch的地址
strrchr(s,ch);//返回指向s中最后一次出现ch的地址
strstr(s1,s2);//返回指向s1中第一次出现s2的地址
PS
- 数组名是一个变量,但不是左值
- 用数组储存字符串,数组长度应比字符串长度多1