
🌟 第一章:字符数组是什么?(小火车故事)
1、🎯 故事:
(1)在"字符王国"里,有一列小火车 🚂
每一节车厢只能坐一个字符
比如:
H e l l o
(2)就像这样一列火车:
[H][e][l][l][o]
2、👉 这列火车就是:字符数组(char数组)
🌟 第二章:字符数组的定义
1、🎯 写法
char s[10];
2、👉 表示:
有一个名字叫 s 的数组
可以存 10个字符
🌟 第三个重要秘密:'\0'(字符串结束符)
1、🔥 这是最重要的知识点!!!
(1)在字符王国里,有一个"隐形管理员":
'\0'
(2)👉 它的作用:
👉 表示:字符串结束了!
2、🎯 举例
char s[6] = {'H','e','l','l','o','\0'};
(1)内存中是:
[H][e][l][l][o][\0]
(2)👉 这才是一个完整字符串!
3、❗为什么必须有 '\0'?
因为:
👉 C++不知道字符串多长
👉 它是靠
\0判断结束的!
🌟 第三章:更简单的写法(重点)
🎯 写法1(推荐)
char s[] = "Hello";
(1)👉 实际存的是:
[H][e][l][l][o][\0]
(2)👉 自动帮你加了 \0!
🎯 写法2(指定大小)
char s[10] = "Hello";
👉 实际是:
[H][e][l][l][o][\0][ ][ ][ ][ ]
🌟 第四章:输入输出字符数组
1、🎯 输出
#include<iostream>
using namespace std;
int main()
{
char s[] = "Hello";
cout << s << endl;
}
(1)👉 输出:
Hello
(2)👉 原理:一直输出到 \0
2、🎯 cin 输入
(1)单词输入
cin >> s;
(2)👉 只能读到:
👉 空格前!!
(3)🎯 示例
👉 输入:
Hello World
👉代码:
char s[20];
cin >> s;
cout << s;
👉 输出:
Hello
3、🎯 整行输入
cin.getline(s, 20);
👉 表示:
👉 最多读 19 个字符 + 1 个
\0
(1)🎯 示例
char s[20];
cin.getline(s, 20);
cout << s;
👉输入:
Hello World
👉输出:
Hello World
🌟 第五章:访问字符数组(像数组一样用)
1、🎯 示例
char s[] = "Hello";
cout << s[0] << endl; // H
cout << s[1] << endl; // e
2、🎯 修改字符
s[0] = 'Y';
👉 结果:
Yello
🌟 第六章:字符数组的遍历
🎯 方法1:for循环
char s[] = "Hello";
for(int i = 0; s[i] != '\0'; i++)
{
cout << s[i] << " ";
}
输出:
H e l l o
🎯 方法2:计算长度
int len = 0;
while(s[len] != '\0')
{
len++;
}
👉 这就是最原始的 strlen 思想!
🌟 第七章:考试常见错误
❌ 错误1:忘记 '\0'
char s[5] = {'H','e','l','l','o'};
👉 ❌ 不是字符串!
👉 因为没有 \0
❌ 错误2:数组太小
char s[5] = "Hello";
👉 ❌ 错误!
👉 因为:
Hello + \0 = 6 个
❌ 错误3:定义错误
s[100] = 'A';
👉❌ 非法!
🌟 第八章:课堂小练习
🎯 练习1:输出字符个数
输入:Hello
输出:5
👉 提示:遇到 \0 停止
参考代码:
cpp
#include <iostream>
using namespace std;
int main() {
char str[100] ;
cin >> str;
int count = 0;
for (int i = 0; ; i++) {
if (str[i] == '\0') break; // 遇到结束符停止
count++;
}
cout << count << endl; // 输出:字符个数
return 0;
}
🎯 练习2:统计字母个数
输入:abc123
输出:3
参考代码:
cpp
#include <iostream>
using namespace std;
int main() {
char str[100] ;
cin >> str;
int letterCount = 0;
for (int i = 0; str[i] != '\0'; i++) {
// 判断是否为大写字母(A-Z)或小写字母(a-z)
if ((str[i] >= 'A' && str[i] <= 'Z') ||
(str[i] >= 'a' && str[i] <= 'z')) {
letterCount++;
}
}
cout << letterCount << endl; // 输出:字母数量
return 0;
}
🎯 练习3:把字符串全部变大写
输入:abc
输出:ABC
👉 提示:
'a' → 'A' = -32
cpp
#include <iostream>
using namespace std;
int main() {
char str[100] ;
cin >> str;
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] >= 'a' && str[i] <= 'z') {
str[i] = str[i] - 32; // ASCII码小写转大写
}
}
cout << str << endl; // 输出:转后字符串
return 0;
}
🌟 总结
✔ char数组 = 字符小火车
✔ 必须有
\0✔
"Hello"会自动加\0✔ 用
s[i]访问✔ 用循环遍历
✔ 输入要注意
cinvsgetline
接下来,我们讲解字符数组的核心战斗技能🔥
🌟 第一章:函数工具箱登场!(字符串魔法工厂)
1、🎯 故事:
在字符王国里,有一个"工具工厂"🏭
专门处理字符小火车(char数组):
| 工具 | 功能 |
|---|---|
| strlen | 数长度 |
| strcpy | 复制 |
| strcmp | 比大小 |
| strcat | 拼接 |
2、👉 这些工具都在:
#include <cstring>
🌟 第二章:strlen(测长度神器)
1、🎯 作用
👉 计算字符串长度(不算
\0)
2、🎯 示例
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char s[] = "Hello";
cout << strlen(s) << endl;
}
(1)👉 输出:
5
(2)🎯 图解
[H][e][l][l][o][\0]
↑ ↑
0 4
👉 长度 = 5
3、🌟 手写 strlen
int my_strlen(char s[])
{
int len = 0;
while(s[len] != '\0')
{
len++;
}
return len;
}
👉 核心思想:一直走,直到遇到 \0
🌟 第三章:strcpy(复制魔法)
1、🎯 作用
👉 把一个字符串复制到另一个
2、🎯 示例
char a[20];
char b[] = "Hello";
strcpy(a, b);
cout << a << endl;
👉 输出:
Hello
3、❗注意
👉 a 必须足够大!!
4、🌟 手写 strcpy
void my_strcpy(char a[], char b[])
{
int i = 0;
while(b[i] != '\0')
{
a[i] = b[i];
i++;
}
a[i] = '\0'; // 别忘了!!
}
🌟 第四章:strcmp(比较大小)
1、🎯 作用
👉 比较两个字符串
2、🎯 规则(非常重要)
a < b → 负数
a = b → 0
a > b → 正数
👉 按 ASCII 比较!
3、🎯 示例
strcmp("abc", "abd") // < 0
strcmp("abc", "abc") // = 0
strcmp("abd", "abc") // > 0
4、🌟 手写 strcmp
int my_strcmp(char a[], char b[])
{
int i = 0;
while(a[i] != '\0' && b[i] != '\0')
{
if(a[i] != b[i])
{
return a[i] - b[i];
}
i++;
}
return a[i] - b[i];
}
🌟 第五章:strcat(拼接魔法)
1、🎯 作用
👉 把 b 接到 a 后面
2、🎯 示例
char a[20] = "Hello";
char b[] = "World";
strcat(a, b);
cout << a << endl;
👉 输出:
HelloWorld
3、🌟 图解
a: [H][e][l][l][o][\0][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
b: [W][o][r][l][d][\0]
👉 拼接后:
[H][e][l][l][o][W][o][r][l][d][\0][ ][ ][ ][ ][ ][ ][ ][ ][ ]
4、🌟 手写 strcat
void my_strcat(char a[], char b[])
{
int i = 0;
while(a[i] != '\0') i++;
int j = 0;
while(b[j] != '\0')
{
a[i] = b[j];
i++;
j++;
}
a[i] = '\0';
}
🌟 第六章:字符串算法基础(竞赛必备🔥)
🎯 1:字符串翻转(Reverse)
(1)🌟 示例
输入:Hello
输出:olleH
(2)🌟 思想(双指针)
头 ←→ 尾 交换
(3)🌟 代码
void reverse(char s[])
{
int len = strlen(s);
for(int i = 0; i < len/2; i++)
{
char t = s[i];
s[i] = s[len-1-i];
s[len-1-i] = t;
}
}
🎯 2:判断回文(Palindrome)
(1)🌟 什么是回文?
aba ✔
abba ✔
abc ✘
(2)🌟 思想
👉 左右对比
(3)🌟 代码
bool is_palindrome(char s[])
{
int len = strlen(s);
for(int i = 0; i < len/2; i++)
{
if(s[i] != s[len-1-i])
return false;
}
return true;
}
🌟 第七章:综合闯关题(实战🔥)
🎯 题1:复制并拼接
输入:
abc
def
输出:
abcdef
🎯 题2:比较字典序
输入:
apple
banana
输出:
apple < banana
🎯 题3:翻转 + 判断回文
输入:
level
输出:
回文
🎯 题4:统计字符串长度(手写版)
👉 不用 strlen
🌟 最终总结(这一节掌握🔥)
✔ strlen → 数长度
✔ strcpy → 复制
✔ strcmp → 比较
✔ strcat → 拼接
✔ 会手写实现(超级重要)
✔ 掌握:
翻转
回文判断