DAY5-预习
2026-07-15 20:39:51
发布于:广东
🔤 C++ 字符与字符串 · 课前预习笔记
明天要学的东西叫 “字符”和“字符串” ——说白了就是让程序处理文字,比如你的名字、你喜欢的电影、你的座右铭,都能用代码表示出来!
一、先搞懂:字符和字符串有什么区别?
| 概念 | 什么意思 | 例子 | C++里怎么写 |
|---|---|---|---|
| 字符 | 单个字母/数字/符号 | 'A'、'b'、'3'、'?' |
用单引号 ' ' 包起来 |
| 字符串 | 一串字符(多个) | "Hello"、"你好"、"abc123" |
用双引号 " " 包起来 |
💡 类比:
- 字符 = 一个汉字 →
'我'- 字符串 = 一句话 →
"我喜欢编程"
二、字符 —— char
1. 怎么定义和赋值?
char c1 = 'A'; // 存一个字母
char c2 = 'b'; // 存一个字母
char c3 = '3'; // 存一个数字字符(注意是'3',不是数字3)
char c4 = '?'; // 存一个符号
char c5 = ' '; // 存一个空格(也是字符!)
⚠️ 注意:
'3'是字符3,3是整数3,完全不一样!
2. 怎么输入输出?
char c;
cin >> c; // 输入一个字符
cout << c; // 输出这个字符
3. 例子:输入输出单个字符
#include <iostream>
using namespace std;
int main() {
char ch;
cout << "请输入一个字符:";
cin >> ch;
cout << "你输入的是:" << ch << endl;
return 0;
}
运行效果:
请输入一个字符:A
你输入的是:A
4. 字符的本质是整数!(ASCII码)
计算机不认识字母,只认识数字。每个字符都对应一个整数,叫 ASCII码。
| 字符 | ASCII码 |
|---|---|
'A' |
65 |
'B' |
66 |
'a' |
97 |
'b' |
98 |
'0' |
48 |
'1' |
49 |
' '(空格) |
32 |
这有什么用处?很多!
char c = 'A';
cout << c; // 输出:A
cout << (int)c; // 输出:65(把字符转成整数看)
cout << c + 1; // 输出:66('A'的ASCII码65 + 1 = 66)
cout << (char)(c + 1); // 输出:B(把66转成字符)
常见判断技巧:
char c = '5';
// 判断是不是数字字符
if (c >= '0' && c <= '9') {
cout << "是数字字符";
}
// 判断是不是大写字母
if (c >= 'A' && c <= 'Z') {
cout << "是大写字母";
}
// 判断是不是小写字母
if (c >= 'a' && c <= 'z') {
cout << "是小写字母";
}
// 大小写转换
char upper = 'A';
char lower = upper + 32; // 'A'(65) + 32 = 97 = 'a'
cout << lower; // 输出:a
💡 记住:大写字母和小写字母的ASCII码相差32,
'A'是65,'a'是97。所以大写转小写就+32,小写转大写就-32。
5. 数字字符转数字(很常用!)
char c = '5';
int num = c - '0'; // '5'(53) - '0'(48) = 5
cout << num; // 输出:5(整数)
💡 这是一个非常常用的技巧!
'0'到'9'的ASCII码是连续排列的,所以c - '0'就能得到对应的整数。
三、字符数组(熟悉)
1. 什么是字符数组?
说白了就是 char 类型的数组,用来存一串字符。C++里,字符数组是从 C 语言继承过来的老方法,了解一下就行,实际用 string 更方便。
2. 怎么定义和初始化?
char s[1005]; // 定义空数组
char s[1005] = "hello"; // 定义并初始化
字符数组在内存中的样子:
下标: 0 1 2 3 4 5
内容: 'h' 'e' 'l' 'l' 'o' '\0'
⚠️ 重要:字符串在结尾有个隐藏的
'\0'(空字符),表示字符串结束了。'\0'的ASCII码是0,它不算在字符串长度里。
3. 怎么输入输出?
char s[1005];
cin >> s; // 输入一个单词(遇到空格或回车就停)
cout << s; // 输出这个字符串
char s[1005];
cout << "请输入你的名字:";
cin >> s; // 输入:zhangsan
cout << "你的名字是:" << s;
⚠️ 注意:
cin >> s只能读入不带空格的字符串。如果输入"hello world",只会读到"hello"(遇到空格就停了)。
那想读带空格的怎么办?用 cin.getline():
char s[1005];
cin.getline(s, 1005); // 读一整行,包括空格!
4. 怎么遍历字符数组?(⭐⭐⭐ 重要!)
记住:字符数组的下标从 0 开始!
char s[1005] = "hello";
// 遍历方法一:用 s[i] != '\0' 判断结束
for (int i = 0; s[i] != '\0'; i++) {
cout << s[i] << " "; // 输出:h e l l o
}
// 遍历方法二:先算长度,再用下标
int len = strlen(s); // 需要 #include <cstring>
for (int i = 0; i < len; i++) {
cout << s[i] << " "; // 输出:h e l l o
}
⚠️ 记住:
'\0'是结束标志,遍历时遇到它就停下来!
5. 怎么求字符数组的长度?
char s[1005] = "hello";
// 方法一:用 strlen() 函数(需要 #include <cstring>)
int len = strlen(s); // len = 5
// 方法二:自己遍历数一遍
int len = 0;
while (s[len] != '\0') { // 从下标0开始数
len++;
}
cout << "长度是:" << len; // 输出:5
⚠️
strlen()统计的是'\0'之前的字符个数,不包括'\0'本身!
6. 字符数组的注意事项
// 1. 数组要开够大,保证能存下所有字符 + 结尾的 '\0'
char s[5] = "hello"; // ❌ 危险!"hello"有5个字符 + '\0' = 6个,装不下!
char s[10] = "hello"; // ✅ 安全,能装下
// 2. 赋值不能直接用 =
char s[1005];
s = "hello"; // ❌ 错误!
strcpy(s, "hello"); // ✅ 要用 strcpy()(需要 #include <cstring>)
// 3. 比较不能用 ==
char s1[1005] = "hello";
char s2[1005] = "hello";
if (s1 == s2) { } // ❌ 错误!比较的是地址,不是内容
if (strcmp(s1, s2) == 0) { } // ✅ 要用 strcmp()
四、string 类型(⭐⭐⭐⭐⭐ 重点!)
这是 C++ 自己发明的字符串类型,比字符数组好用太多了!以后主要用这个!
1. 需要加头文件
#include <string> // 用 string 必须加这个!
2. 怎么定义和赋值?
string s1; // 定义空字符串
string s2 = "hello"; // 定义并赋值
string s3 = "world";
string s4 = s2; // 用另一个string来赋值
s1 = "hi"; // ✅ 可以直接赋值!字符数组可不行
3. 怎么输入输出?
string s;
cin >> s; // 输入一个单词(遇到空格停)
cout << s; // 输出
4. 读入带空格的整行(重要!)
string s;
getline(cin, s); // 读取一整行,包括空格!
cout << s;
5. string 的常用操作(超方便!)
| 操作 | 写法 | 例子 |
|---|---|---|
| 拼接 | s1 + s2 |
"hello" + "world" = "helloworld" |
| 拼接并赋值 | s1 += s2 |
s1 += "!!!" → s1 变成 "hello!!!" |
| 取长度 | s.length() 或 s.size() |
"hello".length() = 5 |
| 取第i个字符 | s[i](下标从0开始!) |
s[0] 是第一个字符 |
| 比较相等 | s1 == s2 |
"abc" == "abc" 是 true |
| 比较大小 | s1 < s2 |
按字典序比较 |
| 清空 | s.clear() |
s 变成空字符串 |
| 判断是否为空 | s.empty() |
空返回 true |
💡 对比字符数组:string 可以直接
=赋值、直接+拼接、直接==比较,太省心了!
6. string 的遍历
string s = "hello";
// 方式一:用下标(下标从0开始!)
for (int i = 0; i < s.length(); i++) {
cout << s[i] << " "; // 输出:h e l l o
}
// 方式二:范围for(C++11,更简洁)
for (char c : s) {
cout << c << " "; // 输出:h e l l o
}
⚠️ 注意:
string的下标从 0 开始!
7. 数字字符串转数字
string s = "12345";
int num = 0;
for (int i = 0; i < s.length(); i++) {
num = num * 10 + (s[i] - '0');
}
cout << num; // 输出:12345(整数)
8. 完整例子
#include <iostream>
#include <string> // 别忘了这个!
using namespace std;
int main() {
string name;
string hobby;
cout << "请输入你的名字:";
getline(cin, name); // 可以读空格
cout << "请输入你的爱好:";
cin >> hobby; // 读一个单词
// 拼接
string message = "我叫" + name + ",我喜欢" + hobby;
cout << message << endl;
// 输出长度
cout << "名字的长度是:" << name.length() << endl;
// 遍历输出每个字符(下标从0开始)
cout << "你的名字每个字是:";
for (int i = 0; i < name.length(); i++) {
cout << name[i] << " ";
}
return 0;
}
五、字符数组 vs string 对比总结
| 对比项 | 字符数组 char s[] |
string 类型 |
|---|---|---|
| 头文件 | 不需要 | #include <string> |
| 定义 | char s[1005]; |
string s; |
| 下标从几开始 | 从0开始 | 从0开始 |
| 赋值 | 不能直接 s = "hi",要用 strcpy |
可以直接 s = "hi" |
| 拼接 | 要用 strcat() 函数 |
直接用 + 或 += |
| 比较 | 要用 strcmp() 函数 |
直接用 ==、<、> |
| 取长度 | 要用 strlen() 函数 |
直接用 .length() 或 .size() |
| 读整行 | cin.getline(s, 1005) |
getline(cin, s) |
| 方便程度 | 麻烦 ❌ | 方便 ✅ |
💡 结论:能用 string 就用 string,省心省力!字符数组了解一下就行,以后做题、写项目基本都用 string。
六、转义字符复习
有些特殊字符不能直接打出来,要用 \ + 字母表示:
| 转义字符 | 意思 |
|---|---|
\n |
换行 |
\' |
输出单引号 ' |
\" |
输出双引号 " |
\\ |
输出反斜杠 \ |
\0 |
空字符(字符串结束标志,不显示) |
cout << "他说:\"你好!\""; // 输出:他说:"你好!"
cout << "第一行\n第二行"; // 输出两行
📝 快速记忆卡
| 概念 | 一句话总结 |
|---|---|
字符 char |
单引号包一个,如 'A' |
| ASCII码 | 字符背后对应的数字,'A'=65,'a'=97 |
| 字符数组 | char s[1005]; 存字符串,下标从0开始 |
| string | #include <string>,功能强大,下标从0开始 |
| 拼接 | string 用 +,超级方便! |
| 取长度 | s.length() |
| 读整行 | getline(cin, s) |
'\0' |
字符串结束标志(遍历时遇到就停) |
| 数字字符→数字 | s[i] - '0' |
🔥 预习小任务(试着想想)
'5'和5有什么区别?'5' - '0'等于几?- 如果想把大写字母
'C'转成小写,代码怎么写?(提示:ASCII码相差32) - 下面两种写法,哪个更方便?为什么?
// 写法一 char s[1005] = "hello"; for (int i = 0; s[i] != '\0'; i++) { ... } // 写法二 string s = "hello"; for (int i = 0; i < s.length(); i++) { ... } - 如果输入
"hello world",cin >> s和getline(cin, s)分别会读到什么?
明天上课带着这些问题来,效果翻倍!🚀
全部评论 1
点赞
7小时前 来自 广东
1



















有帮助,赞一个