第十一节 一维数组、数组的底层原理
- 数组
- 数组是用来存储多个数据的
- 越界:我声明的数组大小不能比我存入的数据量小
int srr[10]={1,2,3};
- 下标法:可以通过下标对数组进行操作
cout << arr[2] <<endl ;
- 遍历
for (int = 0; i < 10 ; ++i){
cout << arr[i] <<endl ;
}
-
硬盘 != 内存
-
内存里面有一个一个的内存单元,每个内存单元有8位,一个字节
-
内存地址:每一个内存单元都有一个地址
-
取址符:把某个对象的地址取出来
sacnf(,&a); cout << &arr[] << endl ; -
数组本身的首地址 == 数组 的第一个元素的首地址
-
首地址 + 0 * 4 == 数组 的第一个元素的首地址
第十二节 全局和局部变量、数组的补充、动态开辟数组
-
越界:下标越界,大小越界。
-
数组的三种初始化和初始化值为0
- 没有赋值的元素都是0
- 满打满算
- 自定大小初始化
int arr[] = {1,2,3,4,5,6,7};
-
初始化值为0
int arr[10] = {0};//把所有的元素都赋值为0 -
全局变量,局部变量
-
全局变量:一旦定义,在该.cpp文件里面,所有函数都可以调用,默认初始化
-
局部变量:初始化的值是随机的值
-
-
全局变量和局部变量重名,会调用局部变量
-
动态定义数组大小
int n;
cin >> n;
//new 操作符 动态申请空间并创建出来
int *arr = new int [n];
//*arr int* 叫做指针变量的前提声明
for(int i = 0;i < n ;++i){
cin >> arr[i];
}
第十三节 二维数组、多维数组
- 多维数组
- 最典型是二维数组
int arr[4][2] = {{,1,2},{3,4},{5,6},{7,8}};
//下标法
cout << arr[1][1] << endl;
//遍历
for(int i = 0; i < 4; ++i){
for(int j = 0;j < 2;++j){
cout << arr[i][j] <<endl;
}
}
-
自定义数组长度大小
int m,n; cin >> m >> n; int** brr =new int* [m];//小数组个数 for(int i = 0;i < m;++i){ brr[i] = new int[n];//brr的类型是int* } for(int i = 0;i < m; ++i){ for(int j = 0;j < 0;++j){ cin >> brr[i][j]; } } cout <<"----------------"endl; for(int i=0;i < m;++i){ for(int j < 0;j < n;++j){ cout << brr[i][j] << endl; } }
第十四节 C语言字符串
-
字符串:指的是一组或者一串字符
-
字符数组必须以\0作为结束标识符来声明
字符数组的初始化方式
char str[] = "hello world"; cout << str << endl -
如果以这种方式初始化,字
符数组会默认在结尾加\0
字符数组的录入
//第一种 char str [1024]; scanf("%s",str); cout << str << endl; //第二种 char str[1024]; cin >> str ; cout << str << endl; //第三种 是为了录入空格 char str[1024]; gets (str); cout << str endl ; //c++中的 char str[1024]; cin.getline(str,1024); cout << str <<endl; //C语言 char str[1024]; fgets(str,1024,stdin); //stdin 它 就是 你要读取的 输入文件 cout << str + 2 << endl //字符数组可以根据内存地址直接从头到尾输出第十五节 string.h
-
string () 字符串的长度
-
它不接收\0
char str[1024]; fgets(str,1024,stdin); //如果你没有输入的部分,我就全部初始化为\0 //然后 fgets() 不光能录入空格 还能录入回车 \n cout << strlen(str) << endl; -
strcmp () 字符串比较大小
#include <iostream>
using namespace std;
int main (viod){
char a[] = "231";
char b[] = "23";
cout << strcmp(a,b) << endl ;
//函数的返回值最后是用函数本身代表的
return 0;
}
-
字符串的拼接 strcat()
#include <iostream> using namespace std ; int main (viod){ char a[] = "hello "; char b[] = "world"; strcat(a,b); //stract 有扩容的功能 //直接把b加到a后面 cout << a << endl; return 0; }
十六、十七节 c++字符串string
- string.h C语言的字符数组
- string c++字符数组库
#include <iostream>
#include <string>
using namespace std ;
int main (void){
//字符串初始化的几种方式
string arr = "hello world";
string s(5,'a');
//把a重复五次拼到一起,然后存储到s
string s1("three");
cout << s1 <<endl;
cout << s << endl;
cout << arr << endl;
return 0;
}
- 拼接
- 字符数组 strcat、
- 字符串 + 加号
#include <iostream>
#include <string>
using namespace std;
int main(void){
string a = "hello";
a = "pre " + a + "world";
cout << a << endl;
return 0;
}
- string 输入输出
#include <iostream>
#include <string>
int main(void){
string str ;
getline(cin,str);
//cin 输入流
//可以读入空格
cout << str << endl ;
cout << str.length() << endl;
//str.length()和str.size()功能一样都是读取字符串个数
cout << str.empty() <<endl ;
//读取字符串是否为空
}
-
更改函数
-
str.replcea(输入字符串的下标位置,输入字符串的替换位数,“替换字符串”,替换字符串的起始位置,替换字符串提取的个数)
#include <iostream> #include <string> using namespace std ; int main (void){ string str ; getline (cin,str); str.replace(2,3,"ABCD",2,2); cout << str << endl ; return 0 ; } -
运行结果

- 删除函数
- str.erase(起始位置,删除长度(如果不写默认从起始位置以后都删除));
- //string 就是个特殊的数据结构,STL容器当中一员
#include <iostream>
#include <string>
using namespace std ;
int main (void){
string str ;
getline (cin,str);
str.erase(3,2);//从第三位开始,删除2位
cout << str << endl ;
return 0 ;
}
-
运行结果
-
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sx2WG8SO-1665970663814)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20221015175222698.png)]](https://i-blog.csdnimg.cn/blog_migrate/6371bd02dcf267a091e9e9726f97e88f.png)
-
下标法
-
string的底层原理还是字符数组
-
字符数组和string的转换
char hh[] = "hhhhh"; string ssss = hh ; //字符数组 转变为 string 类型 //string 类型 是没有办法直接转变位字符数组,他只能 转换为 const char* //类型 后面带有* 就是指针变量 char* p = (char*)ssss.c_str(); cout << p << endl ; return 0 ;

被折叠的 条评论
为什么被折叠?



