"这篇资源主要讲解了字符串习题和数组的相关知识,特别是在C++语境下的应用。内容涉及字符串的查找算法以及数组的各种操作,包括一维数组、二维数组、字符数组的定义、初始化和使用。同时,提到了动态数组和静态数组的区别,以及如何利用C++标准模板库(STL)中的`vector`来实现变长数组。"
在C++编程中,字符串是字符数组的一种特殊形式,经常用于处理文本数据。字符串习题中涉及了两个关键的算法:
1. `find(char str[], char substr[])`:这个函数用于查找`substr`在`str`中出现的位置。它忽略了大小写,如果找到`substr`,则返回其在`str`中的起始位置;如果没有找到,则返回-1。注意,这个函数只会返回第一个匹配的位置。
2. `substring(char str[], int beg, int end, char substr[])`:此函数计算`substr`在`str`的子串`[beg, end]`中出现的次数。例如,对于字符串"This is a test.",如果查询从第一个字符到第10个字符的子串中"is"的出现次数,`substring(test, 1, 9, "is")`将返回2。
数组是C++中基本的数据结构之一,分为一维数组、二维数组和字符数组。一维数组是最简单的形式,可以看作是一条线性的数据存储结构。数组的特点包括:
- 数组是一组类型相同的数据集合,它们在内存中占据连续的空间。
- 数组名实际上存储的是数组首元素的地址。
- 数组的大小在声明时必须是常量,对于静态数组,大小在编译时即确定;对于动态数组,大小可以在程序运行时决定。
在C++中,可以使用`new`运算符来动态分配数组,如`int *p = new int[len];`。当不再需要数组时,应使用`delete[]`释放内存,例如`delete[] p;`。
此外,C++标准模板库(STL)中的`vector`类提供了一种更灵活的动态数组实现,它可以自动扩展大小。例如,`vector<int> array(len);`创建了一个长度为`len`的整数向量,可以通过索引或迭代器进行访问和操作。
数组的初始化通常在声明时完成,可以使用初始化列表。例如,对于整型数组`int iArr[3]={1,2,3};`,浮点型数组`float fArr[4]={3.14};`,字符数组`char cName[]="Jackson";`,字符串数组`char *pName[3]={"Spanish","German"};`,结构体数组`StructStudents[3]={{1001,"linlin"},{1020,"Kelvin"}};`,甚至自定义类型数组`Box shoesbox[3]={Box(1,2,3),Box(3,4,5)};`。
访问数组元素通常通过数组名和下标完成,如`a[0]`到`a[n-1]`,其中`n`是数组的大小。数组元素的引用和赋值都是通过这种下标方式完成的。