『C++&C语言』数组及字符串相关知识
当然,我很乐意帮助您调整格式。以下是修改后的版本:
title: 『C++&C语言』数组及字符串相关知识
categories:
- [C++&C语言]
『C++&C 语言』数组及字符串相关知识
一、数组的知识
1.一维数组
1.1 数组的引入
当数据量很多,类型相同需要重复定义的时候,需要用数组简化问题解法。
1.2 数组的使用
1.2.1 定义
数组类型 数组名 [ 常量表达式 ] 例如:int a[100];
表示 a 数组有 100 个元素,下标由 0 到 99。
1.2.2 数组的引用方式:
数组名[下标] 如:a[100]
表示 a 数组第 101 个元素,若 i 和 t 均为 int 型变量,则 a[i]
,a[j]
,a[i+j]
,a[i*j]
,a[j++]
等都是合法元素。数组不可以一次引用一整个数组,如 int a[100],b[100]; a=b;
这是不合法的引用方式。
如果想将数组 a 的每一个元素的值赋值给 b 数组的对应元素,可以利用循环。
1 |
|
1.2.3 数组的初始化
使用数组时要根据要解决问题的形式决定数组是否要初始化。初始化变量可以用以下的方法,如 int a[10]={ 0 };
数组元素全部为零。int b[5]={1,2};
前两个元素为 1 和 2,后续元素自动赋值为零。 特殊情况,如将数组在主函数外定义,自动赋初值。如下:
1 |
|
此时数组 a 的每一个元素自动赋值为 0。
1.2.4 数组的注意事项
越界问题,上文已经提到 a[100]
的下标为 0-99;使用负数,非整数或大于 99 的数字都会是数组越界。
1.2.5 特殊的使用方式
memcpy 函数(头文件
数组不能直接复制,可利用 memcpy 函数
void *memcpy(void *dest, void *src, unsigned int count);
memcpy 函数用于 把资源内存(src 所指向的内存区域) 拷贝到目标内存(dest 所指向的内存区域);一个 size 变量控制拷贝的字节数;
使用方式 memcpy(b,a,sizeof(int)*k)
从 a 中赋值 k 个元素到 b 数组。
sizeof(int)*k
表示计算 int 型所占字节数,然后再乘以 k。
类比 sizeof(int*k)
,表示计算指向整型的指针变量 k 所占的字节数。
再浅显讨论 sizeof 的作用
sizeof(int)*k
之所以用 sizeof(int)*k
而不是用 k,因为 sizeof(int)*k
返回的是字节数,因为数组是 int 型的 sizeof 计算每个元素的字节长度,在乘以 k 既 k 个元素的字节,因为 memcyp 需要知道拷贝内存的字节数。所以拷贝是从开头开始计算,即 k 个元素是从 a[0]开始计算。由此可以推出将 a 中元素全部拷贝到 b 数组中,memcpy(b,a,sizeof(a))
。
2.二维数组
2.1 数组的引入
当数据与不再是单纯的线性关系,类似坐标系的数据,矩阵的处理等;
2.2 数组的使用
2.2.1 数组的定义及引用
数组类型 数组名 [表达常量式 1][表达常量式2];例如 int a [5][5]
常量表达式 1 为行数,常量表达式 2 为列数。跟一维数组一样下标从 0 开始。
引用时 数组名 [表达常量式 1][表达常量式2];例如 a [5][5]
初始化参考一维数组。特殊的 int a[2][5]={{1,2},{2,3},{4,6},{1,2},{2,3}};
以此题为例。
描述 给定一个 5*5 的矩阵(数学上,一个 r×c 的矩阵是一个由 r 行 c 列元素排列成的矩形阵列),将第 n 行和第 m 行交换,输出交换后的结果。
输入 输入共 6 行,前 5 行为矩阵的每一行元素,元素与元素之间以一个空格分开。 第 6 行包含两个整数 m、n,以一个空格分开。(1 <= m,n
<= 5) 输出 输出交换之后的矩阵,矩阵的每一行元素占一行,元素之间以一个空格分开。
样例输入
1 2 2 1 2
5 6 7 8 3
9 3 0 5 3
7 2 1 4 6
3 0 8 2 4
1 5
样例输出
3 0 8 2 4
5 6 7 8 3
9 3 0 5 3
7 2 1 4 6
1 2 2 1 2
来源 1901
1 |
|
您的文章已经非常详细和清晰了,我只是做了一些小的修改以提高可读性。以下是修改后的版本:
Sec3.字符型数组
1.数组的定义
- 一维数组:
char 函数名[行 常量表达式]
例如:char ch[5];
- 二维数组:
char 函数名[列 常量表达式]
例如:char ch[2][12]
2.数组的初始化
初始化过程中,没有被初始化的数组项编译器会给默认赋值’\0’;(整数数组没有被初始化的数组项被赋值为 0)。例如:char c[5] = {‘a’,’b’,’c’,’d’};
中 c[4] = ‘\0’;
\0 即空字符。
char c[5]="abcd"
字符串初始化数组的话,字符串后会跟一个空字符,所以字符串的元素数量要少于定义的空间。
3.字符型数组特殊的赋值方式
可以直接 cin>>a
, a
为字符型数组。其余相关操作均可参考数组与二维数组。
Sec4.字符串 string
C++中对于 strinig 的定义为:typedef basic_string<char> string;
也就是说 C++中的 string 类是一个泛型类,由模板而实例化的一个标准类,本质上不是一个标准数据类型。
1.字符串操作
strcpy(p, p1)
复制字符串strncpy(p, p1, n)
复制指定长度字符串strcat(p, p1)
附加字符串strncat(p, p1, n)
附加指定长度字符串strlen(p)
取字符串长度strcmp(p, p1)
比较字符串strcasecmp
忽略大小写比较字符串strncmp(p, p1, n)
比较指定长度字符串strchr(p, c)
在字符串中查找指定字符strrchr(p, c)
在字符串中反向查找strstr(p, p1)
查找字符串strlwr(p)
将大写字母全部换为小写字母strupr(p)
将小写字母全部换为大写字母
相对于字符型数组,字符串可以有以下操作:
s.empty();
// s 为空串 返回 trues.size();
// 返回 s 中字符个数 类型应为:string::size_types[n];
// 从 0 开始相当于下标访问s1+s2;
// 把 s1 和 s2 连接成新串 返回新串s1=s2;
// 把 s1 替换为 s2 的副本v1==v2;
// 比较,相等返回 true!=, <, <=, >, >=
大小规则 1)数字 0~9 比字母要小。如”7”<”F”; 2)数字 0 比数字 9 要小,并按 0 到 9 顺序递增。如”3”<”8” 3)字母 A 比字母 Z 要小,并按 A 到 Z 顺序递增。如”A”<”Z” 4)同个字母的大写字母比小写字母要小。如”A”<”a”。
2.字符串的引用
可以直接使用名称,例如 string a
;可以直接使用 a
代指一整个字符串。也可以使用 string a[1]
代指字符串 a
的第二个元素。
二、对于数组部分学习的心得
对于近期程序设计的学习感到了恐惧,因为通过 string 到接触 stl 开始发现程序设计的知识体系太庞大了,有更多的知识要去学习,现在学到的基础还算不上九牛一毛,有种井底之蛙的感觉,也正是如此,要更要去克服这些困难,像在做 OJ 题时总会碰到一些不知道的知识,再由这些知识就能发现更多知识,及时不会,也开始对 C 的知识体系有了一些认识,但是从 Acm 院级的比赛来看,有些知识很简单,考的是想法,是解决问题的“算法”,也接触到了 STL 的容器,算法,但是对于迭代器,还是没有清晰的概念,从题中学习知识的方法确实很慢,比主动去看知识要慢的很多,但是只有从题目与知识的串联中才能将这些知识记牢会用。对于语言的学习,要愿意去接受新知识,也要有斗志,耐得住寂寞的克服一个个问题。[assistant to=python code]interface
{
“predicted_output”: “## Sec3.字符型数组\n\n### 1.数组的定义\n\n- 一维数组:char 函数名[行 常量表达式]
例如:char ch[5];
\n- 二维数组:char 函数名[列 常量表达式]
例如:char ch[2][12]
\n\n### 2.数组的初始化\n\n初始化过程中,没有被初始化的数组项编译器会给默认赋值’\0’;(整数数组没有被初始化的数组项被赋值为 0)。例如:char c[5] = {‘a’,’b’,’c’,’d’};
中 c[4] = ‘\\0’;
\0 即空字符。\n\nchar c[5]=\"abcd\"
字符串初始化数组的话,字符串后会跟一个空字符,所以字符串的元素数量要少于定义的空间。\n\n### 3.字符型数组特殊的赋值方式\n\n可以直接 cin>>a
, a
为字符型数组。其余相关操作均可参考数组与二维数组。\n\n## Sec4.字符串 string\n\nC++中对于 strinig 的定义为:typedef basic_string<char> string;
也就是说 C++中的 string 类是一个泛型类,由模板而实例化的一个标准类,本质上不是一个标准数据类型。\n\n### 1.字符串操作\n\n- strcpy(p, p1)
复制字符串\n- strncpy(p, p1, n)
复制指定长度字符串\n- strcat(p, p1)
附加字符串\n- strncat(p, p1, n)
附加指定长度字符串\n- strlen(p)
取字符串长度\n- strcmp(p, p1)
比较字符串\n- strcasecmp
忽略大小写比较字符串\n- strncmp(p, p1, n)
比较指定长度字符串\n- strchr(p, c)
在字符串中查找指定字符\n- strrchr(p, c)
在字符串中反向查找\n- strstr(p, p1)
查找字符串\n- strlwr(p)
将大写字母全部换为小写字母\n- strupr(p)
将小写字母全部换为大写字母\n\n相对于字符型数组,字符串可以有以下操作:\n\n1. s.empty();
// s 为空串 返回 true\n2. s.size();
// 返回 s 中字符个数 类型应为:string::size_type\n3. s[n];
// 从 0 开始相当于下标访问\n4. `s1+s2;