Files
project1/第08课-字符串与string/教案-学生版.md

145 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第8课字符数组与string
## 教学目标
- 掌握 string 类的基本操作(长度、访问、截取、查找)
- 理解字符数组与 string 的区别
- 能处理字符串遍历、逆序、回文判断等常见问题
- 会用 `getline` 读取含空格的字符串
## 核心考点:字符串输入和逐字符处理
### 考什么
正确读取单词或整行文字再逐个访问________完成统计、查找、替换或回文判断。
### 必须理解
`cin >> s` 遇到________就停止`getline(cin, s)` 会读取________。前面使用 `cin >>`通常先执行________清理残留换行。字符串合法下标是________。
### 核心写法
```cpp
cin >> n;
____________________;
string s;
____________________;
for (int i = 0; i < ____________________; i++) {
char c = ________;
}
```
### 常见错误
- 为什么 `cin >> s` 不能读完整句子________________
- `getline` 为什么有时会直接读到空行________________
- `i <= s.length()` 错在哪里________________
### 判断是否掌握
- [ ] 我能按输入格式选择读取方式。
- [ ] 我能处理 `cin` 后的残留换行。
- [ ] 我能无越界地逐字符处理字符串。
---
## 课堂编程题
### 课堂1两种字符串输入【适中】
**题目描述:** 第一行输入一个不含空格的单词,使用字符数组保存;第二行输入一个可能含空格的句子,使用字符串保存。依次输出单词长度、句子长度以及句子中的空格数量。
**输入格式:** 第一行输入一个不含空格的单词;第二行输入一整句话。
**输出格式:** 依次输出单词长度、句子长度和空格数量。
**数据范围:** 单词和句子长度均不超过 200。
**输入样例:**
```text
GESP
I love C++
```
**输出样例:**
```text
4 10 2
```
**解题思路:** 字符数组以 `'\0'` 作为结束标志;读完单词后先忽略换行,再用 `getline` 读取整行字符串。
**易错提醒:** `cin` 不会读入空格;`getline` 前要处理输入缓冲区中的换行符。
### 课堂2字符串分类统计【适中】
**题目描述:** 输入一整行字符串,统计大写字母、小写字母、数字、空格和其他字符的数量。
**输入格式:** 输入一整行字符串。
**输出格式:** 依次输出五类字符的数量。
**数据范围:** 字符串长度不超过 500。
**输入样例:**
```text
Hi 2026!
```
**输出样例:**
```text
1 1 4 1 1
```
**解题思路:** 使用下标遍历字符串,通过互斥分支判断字符所属类别。
**易错提醒:** 字符串的合法下标为 0 到长度减 1分类时只能让一个字符进入一个计数器。
### 课堂3敏感词替换与截取【适中】
**题目描述:** 输入一个不含空格的原字符串、待查找字符串和替换字符串。将原字符串中第一次出现的待查找内容替换掉,并输出替换结果;若未找到,输出 `NOT FOUND`。找到时还要输出替换位置之前的前缀。
**输入格式:** 依次输入原字符串、待查找字符串和替换字符串,三者均不含空格。
**输出格式:** 找到时第一行输出替换后的字符串,第二行输出原字符串中匹配位置之前的部分;未找到时输出 `NOT FOUND`
**数据范围:** 每个字符串长度不超过 200。
**输入样例:**
```text
abc123abc 123 XYZ
```
**输出样例:**
```text
abcXYZabc
abc
```
**解题思路:**`find` 获得首次位置;用 `replace` 替换,用 `substr` 截取前缀。
**易错提醒:** 未找到时 `find` 返回 `string::npos`,不能直接拿这个位置去替换或截取。
### 课堂4忽略格式的回文句【适中】
**题目描述:** 输入一整行字符串,忽略空格和英文字母大小写后,判断它是否为回文串。
**输入格式:** 输入一整行字符串。
**输出格式:** 是回文串输出 `YES`,否则输出 `NO`
**数据范围:** 字符串长度不超过 500只含英文字母和空格。
**输入样例:**
```text
Never odd or even
```
**输出样例:**
```text
YES
```
**解题思路:** 先构造一个无空格、全小写的新字符串,再用左右下标向中间比较。
**易错提醒:** 比较前必须统一大小写;空字符串和单字符都属于回文串。
---
## 课后作业
> 请完成本课对应的课后作业,见编程题文件。