当前位置: 首页 > news >正文

第11天:字符串 — 操作指南

小白记录日常学习

一、今日任务总览

| 步骤 | 内容 | 时间 |
|------|------|------|
| ① | 阅读教材:第4章 §4.1-4.3 + 第11章 §11.1-11.3 | 60分钟 |
| ② | 理解字符串在内存中的样子 | 20分钟 |
| ③ | 手打并运行3个练习 | 50分钟 |
| ④ | 自由实验 | 30分钟 |

二、今日核心知识点

2.1 字符串的本质

C 语言没有专门的"字符串类型"。字符串就是一个以 `'\0'` 结尾的 `char` 数组。

```
char name[] = "AB";

内存:
name[0] = 'A'
name[1] = 'B'
name[2] = '\0' ← C 自动加上的,标志"字符串在这里结束"
```

```
strlen("AB") = 2 ← 数到 '\0' 之前有几个字符
sizeof("AB") = 3 ← 包括隐式的 '\0'
```

2.2 字符串与指针

学完指针(第10天)再看字符串,一切变简单了:

```c
char *p = "Hello"; // p 指向字符串首字符 'H'

*p → 'H' // 首字符
*(p+1) → 'e' // 下一个字符
*(p+4) → 'o' // 第5个字符
*(p+5) → '\0' // 结束符
```

遍历字符串的标准写法:
```c
while (*p != '\0')
{
printf("%c", *p);
p++;
}
```

2.3 常用字符串函数(`<string.h>`)

| 函数 | 作用 | 例子 |
|------|------|------|
| `strlen(s)` | 返回长度(不含 `\0`) | `strlen("Hi")` → 2 | string length
| `strcpy(dst, src)` | 把 src 复制到 dst | `strcpy(a, b)` | string copy
| `strcmp(a, b)` | 比较两个字符串 | 相等返回 0,a<b 返回负数 | string compare
| `strcat(dst, src)` | 把 src 拼接在 dst 后面 | `strcat(s, "!")` | string concatenate

2.4 fgets 代替 gets

```c
// gets(str); ← 危险!可能溢出,C11已移除

char str[100];
fgets(str, sizeof(str), stdin); // ★ 安全:限制了最大读取长度

// 注意:fgets 会保留末尾的换行符 '\n',如果不需要,手动去掉:
str[strcspn(str, "\n")] = '\0';
```

2.5 字符分类函数(`<ctype.h>`)

| 函数 | 判断的是什么 |
|------|-------------|
| `isupper(c)` | 大写字母 A-Z |
| `islower(c)` | 小写字母 a-z |
| `isdigit(c)` | 数字 0-9 |
| `isspace(c)` | 空白字符(空格、\t、\n) |
| `isalpha(c)` | 字母(大小写都算) | alphabetical

三、阅读任务(60分钟)

| 章节 | 内容 | 重点 |
|------|------|------|
| §4.1-4.3 | 字符串入门、`strlen`、常量和预处理器 | ★★★ |
| §11.1 | 字符串与字符串函数 | ★★★ |
| §11.2 | 字符串输入 | ★★ |
| §11.3 | 字符串输出 | ★★ |

四、动手练习(50分钟)

练习1:自己实现 strlen

```bash
gcc ex1_strlen.c -o ex1_strlen.exe
./ex1_strlen.exe
```

重点对比:`strlen()` 和 `sizeof()` 的返回值差 1。

练习2:字符串统计

```bash
gcc ex2_string_stats.c -o ex2_string_stats.exe
./ex2_string_stats.exe
```

输入一个带大小写字母和数字的字符串(如 `Hello2026 World`),观察统计结果。

练习3:字符串反转(双指针)

```bash
gcc ex3_reverse_string.c -o ex3_reverse_string.exe
./ex3_reverse_string.exe
```

纸上追踪:画出 `"ABCD"` 反转时每一轮 left 和 right 的变化。

五、自由实验(30分钟)

实验1:判断回文

写一个函数判断字符串是否为回文(正读反读一样,如 `"level"`)。用第10天学的双指针。

实验2:大小写转换

输入一个字符串,把所有大写字母转小写,小写转大写。

六、今日自检

- [ ] 知道字符串 = `\0` 结尾的 char 数组
- [ ] 能区分 `strlen` 和 `sizeof`
- [ ] 知道为什么要用 `fgets` 而不是 `gets`
- [ ] 能自己写 strlen 函数
- [ ] 三个练习全部运行成功

七、明天预告

第12天:全面复习 + 10道综合练习题— 独立写代码,不看书。

http://www.jsqmd.com/news/1318536/

相关文章:

  • 2026年钇稳定氧化锆瓷供应商甄选指南:工艺、资质与服务能力综合参考 - 优质品牌商家
  • Java面向对象编程核心概念与实战技巧
  • 虚幻引擎Transform Gizmo深度定制:从原理到实战的完整指南
  • 从2D到3D卷积:深度解析CNN在图像与视频处理中的核心差异与应用选型
  • 低代码与零代码深度解析:核心差异、技术原理与选型指南
  • 武冈市厨房漏水怎么处理_2026湘西南资水上游古城漏水维修与价格表 - 雨婺虹房屋维修
  • 深度解构:三步骤实现群晖NAS硬盘兼容性自由的技术探索
  • Java序列化机制深度解析与性能优化实践
  • 成都蜂窝板厂家怎么选?2026年本地优质供应商甄选参考 - 优质品牌商家
  • Malware-Bazaar工具集:威胁情报自动化分析与实战指南
  • 文件包含漏洞编码绕过实战:从双重URL编码到PHP Filter协议
  • 关系图谱正在淘汰传统搜索引擎——这4类业务已紧急切换AI搜索架构(窗口期仅剩117天)
  • 专科生应对AIGC检测的10款高效工具与操作流程
  • 从零搭建AI对话机器人:ChatGPT API接入、环境配置与排错全指南
  • Nmap网络探测实战:从端口扫描到安全审计的深度指南
  • 2026年重庆砌筑砂浆公司怎么选?本地厂家实力与选购指南 - 优质品牌商家
  • 地面辐射防护原理与电子设备抗辐射技术
  • 《鸣潮》远距离贴图错误修复指南:从DirectX到驱动的系统性排查
  • 三维绘图控件使用方法(2)- grid 函数
  • Allegro SPB 17.4 自定义视图:提升PCB设计效率的可见性管理
  • BP神经网络激活函数选择:tansig与logsig的数学特性与工程实践对比
  • 2026年广州发明专利、实用新型专利与资质认证服务哪家好?专业视角全解析 - 优质品牌商家
  • 从 Prompt 到流水线:WorkBuddy 多专家协同如何把 SEO/GEO 自动化
  • 临床预测模型快速入门:从零构建逻辑回归与随机森林模型
  • 制造业ERP系统架构设计与C#关键技术实现
  • 电商店铺出问题 ,反思与迭代改进
  • Godot引擎鼠标事件异常排查:解决mouse_entered/exited闪烁与丢失问题
  • 业务逻辑漏洞:网络安全中的隐形威胁与防御策略
  • 基于大语言模型与API集成的智能旅行助手开发实践
  • JDK 8升级JDK 21:技术演进与迁移实践