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

4.4 KiB
Raw Blame History

第8课字符数组与string

教学目标

  • 掌握 string 类的基本操作(长度、访问、截取、查找)
  • 理解字符数组与 string 的区别
  • 能处理字符串遍历、逆序、回文判断等常见问题
  • 会用 getline 读取含空格的字符串

核心考点:字符串输入和逐字符处理

考什么

正确读取单词或整行文字再逐个访问________完成统计、查找、替换或回文判断。

必须理解

cin >> s 遇到________就停止getline(cin, s) 会读取________。前面使用 cin >>通常先执行________清理残留换行。字符串合法下标是________。

核心写法

cin >> n;
____________________;
string s;
____________________;

for (int i = 0; i < ____________________; i++) {
    char c = ________;
}

常见错误

  • 为什么 cin >> s 不能读完整句子________________
  • getline 为什么有时会直接读到空行________________
  • i <= s.length() 错在哪里________________

判断是否掌握

  • 我能按输入格式选择读取方式。
  • 我能处理 cin 后的残留换行。
  • 我能无越界地逐字符处理字符串。

课堂编程题

课堂1两种字符串输入【适中】

题目描述: 第一行输入一个不含空格的单词,使用字符数组保存;第二行输入一个可能含空格的句子,使用字符串保存。依次输出单词长度、句子长度以及句子中的空格数量。

输入格式: 第一行输入一个不含空格的单词;第二行输入一整句话。

输出格式: 依次输出单词长度、句子长度和空格数量。

数据范围: 单词和句子长度均不超过 200。

输入样例:

GESP
I love C++

输出样例:

4 10 2

解题思路: 字符数组以 '\0' 作为结束标志;读完单词后先忽略换行,再用 getline 读取整行字符串。

易错提醒: cin 不会读入空格;getline 前要处理输入缓冲区中的换行符。

课堂2字符串分类统计【适中】

题目描述: 输入一整行字符串,统计大写字母、小写字母、数字、空格和其他字符的数量。

输入格式: 输入一整行字符串。

输出格式: 依次输出五类字符的数量。

数据范围: 字符串长度不超过 500。

输入样例:

Hi 2026!

输出样例:

1 1 4 1 1

解题思路: 使用下标遍历字符串,通过互斥分支判断字符所属类别。

易错提醒: 字符串的合法下标为 0 到长度减 1分类时只能让一个字符进入一个计数器。

课堂3敏感词替换与截取【适中】

题目描述: 输入一个不含空格的原字符串、待查找字符串和替换字符串。将原字符串中第一次出现的待查找内容替换掉,并输出替换结果;若未找到,输出 NOT FOUND。找到时还要输出替换位置之前的前缀。

输入格式: 依次输入原字符串、待查找字符串和替换字符串,三者均不含空格。

输出格式: 找到时第一行输出替换后的字符串,第二行输出原字符串中匹配位置之前的部分;未找到时输出 NOT FOUND

数据范围: 每个字符串长度不超过 200。

输入样例:

abc123abc 123 XYZ

输出样例:

abcXYZabc
abc

解题思路:find 获得首次位置;用 replace 替换,用 substr 截取前缀。

易错提醒: 未找到时 find 返回 string::npos,不能直接拿这个位置去替换或截取。

课堂4忽略格式的回文句【适中】

题目描述: 输入一整行字符串,忽略空格和英文字母大小写后,判断它是否为回文串。

输入格式: 输入一整行字符串。

输出格式: 是回文串输出 YES,否则输出 NO

数据范围: 字符串长度不超过 500只含英文字母和空格。

输入样例:

Never odd or even

输出样例:

YES

解题思路: 先构造一个无空格、全小写的新字符串,再用左右下标向中间比较。

易错提醒: 比较前必须统一大小写;空字符串和单字符都属于回文串。


课后作业

请完成本课对应的课后作业,见编程题文件。