当前课程知识点:程序设计基础 >  第七章 文本数据处理 >  7.2 统计活跃用户数 >  7.2.2 字符串

返回《程序设计基础》慕课在线视频课程列表

7.2.2 字符串在线视频

7.2.2 字符串

下一节:7.2.3 程序翻译与演示

返回《程序设计基础》慕课在线视频列表

7.2.2 字符串课程教案、知识点、字幕

其实啊 早在我们在第四章引入数组的概念之前

我们其实就一直默默的使用着字符数组

只不过呢 当时这个写法看上去实在是很好理解

大家也没有去深究 我们也没有去特别的强调

而且当时还有很好听的一个名字

我们会管它叫字符串

比如说很多参考书上会教大家写的

第一个程序当中会有输出这样一句

“Hello world”这样一个程序

那这个双引号里面这样一段字符串

这就是一个 我们称之为字符串的一个长的字符串

那这样一个引号里面一串字符这样一个写法

到底代表的是一个什么意思 或者说

这样一个写法在计算机当中是如何给它表达出来的

我们来看一下 实际上 表达的是一片连续的空间

这个空间当中的每一个格子会放上一个字符

而且呢 这个结尾 会有一个特殊的字符

这个\0 那看我们画的这个表格

其实就跟这个字符的数组完全是一样的

那唯一特殊的就是后面这个\0

这个\0什么意思呢 其实就是数值的0

那我们知道ASCII码表当中会给

每一个字符都分配一个对应的数值

那字符的0呢其实对应的数值并不是0

大家之前也可以翻一翻相关的参考书

那反过来 如果是数值的0那对应字符是什么呢

就是我们刚才这个'\0' C语言呢

用'\0'这样一个特殊的字符来表示字符串结束

因为这个正常的字符串前面可显示的字符

hello 一大串 都不会涉及到

应该都不会出现数值0这么样一个值

所以呢 用这样一个值表达的是字符串的结束

也就是说 我这个数组其实不一定多大

也可能非常大 但是里面的内容呢

我只关心到出现\0为止 后面的我就不关心了

这是一个字符串想表达的意思

那知道了这一点 我们看一下这两种写法

一个呢 是我们之前可能会见到的这种

char str[10]一个大括号

去初始化一个字符的数组

这是正常的一个大括号里面放上一些值来

对这个数组进行初始化

那因为是char类型的数组

所以里面的每一项都是char类型的一个常量

那上面这一种 看上去很简洁的

这两种写法 其实就是完全等价的一个写法

就是上面这个双引号的Hello

其实等价于下面大括号的一串最后加一个\0

就是一定要注意最后多了一个

跟我们平时初始化多了一个这个\0

正是因为字符串数组有字符串这样一个特殊的意义

所以才给了它这种非常简洁的一个写法

像下面这个写法显然写起来比较麻烦

那C++语言呢 也对字符串给了它一些特殊的处理

比如说我们之前会用到的

可以对它进行一个cout的输出

也可以对它进行一个cin的输入

那之前我们说cout和cin

输入输出的应该是一个变量

你直接把一个数组交给它

按理说应该是会提示错误的

大家可以去试一下 如果把一个int的数组

那个数组的名字写在str的这个位置

应该是会编译出错的 但是只有字符的数组

写在这个位置是不会出错的

反而呢 是给了它一个特殊的意义

除此之外呢

C语言还提供了一系列的处理字符串的函数

就是类似的我们第一章讲到的

那些数学函数处理一些数学运算一样

处理字符串的函数 我给大家列出来几个常用的

这些函数要使用它 同样要包含一个特殊的头文件

就是cstring的这样一个头文件

那常用的strlen这是string length

求字符串的长度 注意这是字符串的长度

而不是数组的长度 咱们说数组可以很长

但是里面字符串的长度到哪呢

我就关心到\0的那个位置

这里面字符串的长度 就是我们“hello”

就是hello五个 这就是长度为五

不计最后那个\0的长度

那第二条strcpy 实际上是

string copy的一个缩写

是字符串的复制 然后strcmp

是string compare字符串的比较

然后strcat是字符串的连接

这些函数具体的函数的声明

大家可以去查一些相关的资料

到现在呢 咱们应该能看懂函数的声明了

如果呢 我们需要表达一个字符串的数组

那咱们上面说了实际上应该是一个二维的数组

比如说我写成这样 char strs[4][10]

我后面给了一些初始值 那这种写法

想要表达的是我要存储最多4个字符串

每个字符串最多10个字符

也就是 二维数组前面这个4代表的是

字符串的个数 后面这个10代表的是

每一个字符串当中最多有但是个字符

下面我给它做了初始化 注意一下

我一旦写成这样的初始化 双引号的写法

其实都可以替换成刚才大括号里面单引号

的一个一个字符 最后加一个单引号\0的写法

所以注意一下最后 虽然我写成了“Hello”

但是这实际上占了6个字节的空间

因为最后还有一个\0

所以实际上咱们这个数组初始化成定义成

[10]的时候 说它最多包含10个字符

实际上呢 这个10个字符里还包括了那个\0

所以最多包含9个有意义的字符

如果你写一个双引号里面有10个 那就越界了

有了这样的一个定义和初始化呢

数组里面每一项就都是一个字符串

跟我们之前这个变量数组的定义都是类似的

比如说呢 我们可以通过下面这条语句

对strs的第二项求一个字符串的长度

然后把它输出出来

那根据咱们刚才这个初始化的结果

strs的第二项应该是这个双引号的C++

给它求一个长度 那求长度呢是不计那个\0了

就应该是C一个字节 +一个字节

再+一个字节 最后输出的结果就应该是3

其他的一些函数大家可以自己去做一下练习

我这里就不给大家演示了 那下一段呢

我们会应用这些字符串的知识来完成

咱们刚才的统计活跃用户的这样一个问题

程序设计基础课程列表:

第一章 编程初步

-1.1 基础知识

--1.1.1 什么是程序?什么是语言?

--1.1.2 什么是程序设计?

--1.1.3 计算机发展史

-1.2 买菜问题

--1.2.1 问题描述

--1.2.2 程序的基本结构

-1.3 数学运算

--1.3.1 数学运算符

--1.3.2 数学函数

-1.4 补充说明

--1.4.1 编程环境的下载与安装

--1.4.2 程序基本结构中的含义

--1.4.3 格式与风格

-1.5 总结

--1.5 总结

-程设论道

--程设论道

-师生问答

--师生问答一:怎样学好程序设计

--师生问答二:语言选择

--师生问答三:关于函数

-第一章 编程初步--语法自测

第二章 变量与代数思维

-2.1 关于超级计算器的几点思考

--2.1.1 关于超级计算器的几点思考

-2.2 电子秤模拟 — 背景介绍及需求分析

--2.2.1 电子秤模拟 — 背景介绍及需求分析

-2.3 电子秤模拟 — 代码实现

--2.3.1 电子秤模拟 — 代码实现

-2.4 变量定义与变量类型

--2.4.1 变量定义与变量类型

-2.5 猜数游戏与数据表示

--2.5.1 猜数游戏与数据表示

-2.6 关于变量的讨论

--2.6.1 变量的初始值

--2.6.2 变量类型

--2.6.3 变量内存单元地址

--2.6.4 存“变量地址”的变量——指针

--2.6.5 指针的 读/写 操作

--2.6.6 指针的 加/减 操作

--公告

-2.7 变量体现的计算思维

--2.7.1 变量体现的计算思维

-程设论道

--程设论道

-师生问答

--师生问答

-第二章 变量与代数思维--语法自测

第三章 逻辑推理与枚举解题

-3.1 谁做的好事——语义表示

--3.1.1 谁做的好事——语义表示

-3.2 谁做的好事——真假检查

--3.2.1 谁做的好事——真假检查

-3.3 谁做的好事——循环枚举

--3.3.1 谁做的好事——循环枚举

-3.4 谁是嫌疑犯——多重循环枚举

--3.4.1 谁是嫌疑犯——多重循环枚举

-3.5 谁是嫌疑犯——破案线索表示

--3.5.1 谁是嫌疑犯——破案线索表示

-3.6 谁是嫌疑犯——用二进制枚举

--3.6.1 谁是嫌疑犯——用二进制枚举

-程设论道

--程设论道一

--程设论道二

--程设论道三

-师生问答

--师生问答一:字符与ASCII码表

--师生问答二:其他循环语句、运算符优先级与变量作用域

-第三章 逻辑推理与枚举解题--语法自测

第四章 筛法与查找

-4.1 插花游戏

--4.1.1 问题提出(求素数)

--4.1.2 函数初探

--4.1.3 运行演示

-4.2 筛法

--4.2.1 筛法思路

--4.2.2 数组的定义

--4.2.3 代码翻译

--4.2.4 运行演示

--4.2.5 小朋友数人数

--4.2.6 运行演示

--4.2.7 韩信点兵

-4.3 线性查找

--4.3.1 扑克查找问题

--4.3.2 扑克查找问题代码翻译

--4.3.3 最小值问题

--4.3.4 最小值问题代码翻译

-4.4 折半查找

--4.4.1 提问

--4.4.2 折半查找思路

--4.4.3 折半查找代码翻译

--4.4.4 折半查找运行演示

-4.5 排序问题

--4.5.1 插入排序

--4.5.2 选择排序

--4.5.3 函数写法

--4.5.4 运行演示

-4.6 总结

--4.6.1 总结

-程设论道

--程设论道一:数组与编码思维

--程设论道二:筛法

-师生问答

--师生问答一:函数与面向过程编程

--师生问答二:数组的下标越界

-第四章 筛法与查找--语法自测

第五章 分治思想与递归

-5.1 阶乘

--5.1.1 阶乘问题

--5.1.2 递归解法

--5.1.3 递归小结

-5.2 排序

--5.2.1 归并排序——总体思路

--5.2.2 归并排序——思路分解

--5.2.3 归并排序——代码解说

--5.2.4 快速排序——总体思路

--5.2.5 快速排序——代码解说

--5.2.6 排序总结

-5.3 矩阵填充

--5.3.1 矩阵填充问题

--5.3.2 代码解说

-5.4 分书与八皇后

--5.4.1 问题描述

--5.4.2 问题分析——共性

--5.4.3 问题分析——区别

--5.4.4 解题准备——二维数组

--5.4.5 解题准备——递归设计

--5.4.6 代码解说——分书问题

--5.4.7 代码解说——八皇后问题

-5.5 青蛙过河

--5.5.1 问题描述

--5.5.2 问题分析——简单情况

--5.5.3 问题分析——复杂情况

--5.5.4 问题分析——一般情况

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答一

--师生问答二

-第五章 分治思想与递归--语法自测

第六章 递推与动态规划

-6.1 兔子数列问题

--6.1.1 问题描述

--6.1.2 按大小兔子分别递推

--6.1.3 按总数递推

--6.1.4 不用数组递推

-6.2 分鱼问题

--6.2.1 问题描述

--6.2.2 从A到E递推

--6.2.3 从E到A递推

-6.3 橱窗的插花问题

--6.3.1 问题描述

--6.3.2 题意理解与分析

--6.3.3 用枚举思想解题

--6.3.4 采用递推的优化算法

--6.3.5.1 采用动态规划算法—优化分析

--6.3.5.2 采用动态规划算法—递推代码

--6.3.5.3 采用动态规划算法—计算过程

--6.3.5.4 采用动态规划算法—输出方案

--6.3.6 动态规划总结

-6.4 最长公共子序列问题

--6.4.1 问题描述与理解

--6.4.2 问题分析

--6.4.3.1 动态规划解题(1)

--6.4.3.2 动态规划解题(2)

--6.4.3.3 动态规划代码

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答

-第六章 递推与动态规划--语法自测

第七章 文本数据处理

-7.1 统计记录总数

--7.1.1 问题分析

--7.1.2 读文件操作

-7.2 统计活跃用户数

--7.2.1 问题分析

--7.2.2 字符串

--7.2.3 程序翻译与演示

-7.3 统计在线时长

--7.3.1 问题分析

--7.3.2 结构

--7.3.3 程序翻译与演示

--7.3.4 写文件操作

-7.4 总结

--7.4.1 总结

-程设论道

--程设论道

-师生问答

--师生问答

-第七章 文本数据处理--语法自测

第八章 非文本数据处理

-8.1 将数据组织成链表

--8.1.1 链表的基本概念

--8.1.2 代码讲解

--8.1.3 链表遍历与释放

-8.2 提高链表访问效率 —— 哈希链表

--8.2.1 简单的哈希算法

--8.2.2 算法实现

-8.3 以二进制文件存储链表

--8.3.1 二进制文件的操作方法

--8.3.2 代码讲解

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答

-第八章 非文本数据处理--语法自测

第九章 可配置的程序设计

-9.1 自动售卖程序

--9.1.1 提出问题与初步设计

--9.1.2 细化实现订单处理

--9.1.3 使程序更健壮

-9.2 配制水果信息

--9.2.1 提出问题与设计文件格式

--9.2.2 实现订单处理功能

-9.3 指定界面语言

--9.3.1 提出问题与命令行参数

--9.3.2 实现程序功能

-程设论道

--程设论道

-师生问答

--师生问答

-第九章 可配置的程序设计--语法自测

7.2.2 字符串笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。