1. 字符与字符串的区别(char vs string)
| 项目 | char 类型 | string 类型 |
|---|
| 定义 | 表示单个字符 | 表示一串字符(字符串) |
| 写法 | 使用 单引号 'a' | 使用 双引号 "abc" |
| 类型归属 | 基本数据类型 | C++ 标准库类型(类类型) |
| 头文件 | 不需要额外头文件 | 需要包含 <string> |
| 命名空间 | 不依赖 std | 需要使用 std::string 或 using namespace std; |
| 内存占用 | 固定 1 字节 | 动态可变长度 |
| 示例 | char c = 'A'; | std::string s = "Hello"; |
2. if 判断结构的区别(多次判断 vs 单分支判断)
| 结构 | 写法 | 执行逻辑 | 特点 |
|---|
多个 if 连续 | if (...) {}if (...) {}if (...) {} | 每个条件都会单独判断,多个条件都可能成立 | 用于多个独立判断 |
if ... else if ... else | if (...) {}else if (...) {}else {} | 从上到下判断,只执行第一个为真的分支 | 用于互斥判断逻辑 |
嵌套 if | if (...) { if (...) {...} } | 在一个条件成立后再判断另一个条件 | 常用于多层条件筛选 |
3. if…else 与 switch…case 对比总结
| 对比维度 | if…else | switch…case |
|---|
| 作用 | 判断任意逻辑条件(范围、大小、逻辑表达式等) | 判断单个变量的多个固定取值(通常是枚举或整数) |
| 适用类型 | 任意类型表达式:整型、浮点、布尔、字符串等 | 只能用于整型或枚举型常量(C++17 前不支持字符串) |
| 语法结构 | if (条件1){...} else if (条件2){...} else {...} | switch (变量){ case 常量1: ...; break; case 常量2: ...; break; default: ...; } |
| 执行逻辑 | 从上到下依次判断,第一个满足条件的分支执行,后续跳过 | 匹配对应 case,执行后若无 break,会继续“穿透”执行下面的 case |
| 复杂度 | 可处理区间/逻辑复合条件 | 仅支持相等匹配 |
| 可读性 | 当条件复杂时结构较长 | 当条件值多但逻辑相似时更清晰 |
| 常见场景 | 判断区间、逻辑组合,如 x>10 && y<5 | 菜单选择、状态机编号判断等 |
| 是否必须 break | 否 | 是(否则会“穿透”执行下一个 case) |
1.代码示例对比
(1)if…else 示例
#include <iostream>
using namespace std;
int main() {
int score;
cin >> score;
if (score >= 90) {
cout << "优秀" << endl;
} else if (score >= 60) {
cout << "及格" << endl;
} else {
cout << "不及格" << endl;
}
}
适合判断区间、逻辑组合等多条件场景。
(2)switch…case 示例
#include <iostream>
using namespace std;
int main() {
int option;
cin >> option;
switch (option) {
case 1:
cout << "开始任务" << endl;
break;
case 2:
cout << "暂停任务" << endl;
break;
case 3:
cout << "结束任务" << endl;
break;
default:
cout << "无效选项" << endl;
break;
}
}
适合多个枚举型、编号型选择结构,逻辑简洁。
2. 延伸补充:三者层次总结
| 结构类型 | 特点 | 是否互斥 | 常见用途 |
|---|
多个 if | 每个条件独立判断 | 否 | 多个条件都可能成立 |
if…else if…else | 从上到下判断,仅执行一个分支 | 是 | 多分支选择 |
switch…case | 等值判断,结构清晰 | 是 | 菜单、状态编号判断 |