- C++
C++ 编程基础与字符串操作学习笔记
- 2025-7-24 16:19:04 @
C++ 编程基础与字符串操作学习笔记
一、课程目标
- 掌握基础输入输出、数组应用,解决实际逻辑问题(判断同学是否到达)。
- 深入学习
string
字符串的多种操作,包括输入输出、构造、遍历、修改等。
二、基础逻辑题:判断未到达同学(数组应用)
(一)问题背景
老师组织春游,同学报编号,需根据报数判断哪些同学未到达。
(二)解题思路
- 用布尔数组
tong
标记同学是否到达,初始全为false
。 - 读取报数,将对应编号的数组位置标记为
true
。 - 遍历所有同学编号,检查
tong
数组,未标记true
的即为未到达同学;若全到达,输出同学总数N
。
(三)代码实现(带注释)
#include<iostream>
using namespace std;
int main() {
int N, M; // N 是同学总数,M 是报数次数
cin >> N >> M;
// 布尔数组,tong[i] 为 true 表示编号 i 的同学已到达
bool tong[2000] = {false};
// 读取 M 次报数,标记对应同学为已到达
for (int i = 1; i <= M; i++) {
int num;
cin >> num;
tong[num] = true;
}
bool allArrived = true; // 标记是否所有同学都到达
// 遍历 0 到 N-1 号同学
for (int i = 0; i < N; i++) {
if (!tong[i]) { // 若同学未到达
cout << i << " ";
allArrived = false;
}
}
// 所有同学都到达时输出 N
if (allArrived) {
cout << N << endl;
}
return 0;
}
(四)代码解释
- 输入处理:
cin >> N >> M
读取同学总数和报数次数。 - 标记到达状态:通过循环读取报数,用
tong[num] = true
标记对应同学已到达。 - 检查未到达同学:遍历同学编号,依据
tong
数组判断,输出未到达同学编号;全到达则输出N
。
三、string
字符串全方位学习
(一)string
基础操作:输入输出
1. 普通输入(遇空白结束)
#include<iostream>
#include<string>
using namespace std;
int main() {
string s1 = "ok";
string s2;
cin >> s2;
// 输出 s2 和 s1,s2 遇空格、Tab、回车结束输入
cout << s2 << " " << s1 << endl;
return 0;
}
解释:cin >> s2
读取字符串,遇到空白(空格、Tab、回车)停止,适合读单个单词。
2. 整行输入(getline
)
#include<iostream>
#include<string>
using namespace std;
int main() {
string s1;
// 读取一整行,包括空格
getline(cin, s1);
// 输出字符串及长度(size 和 length 效果相同)
cout << s1 << " " << s1.size() << " " << s1.length() << endl;
return 0;
}
解释:getline(cin, s1)
读取一行内容(含空格),size()
和 length()
都能获取字符串长度。
(二)string
构造方式
#include<iostream>
#include<string>
using namespace std;
int main() {
// 直接赋值初始化
string s1 = "ok";
// 构造函数初始化,效果同直接赋值
string s2("World");
// 构造函数:5 个 'n' 组成字符串
string s3(5, 'n');
cout << s1 << " " << s2 << " " << s3 << endl;
return 0;
}
解释:展示 string
多种构造方式,直接赋值、构造函数传字符串、构造函数传字符和数量,灵活创建字符串。
(三)string
遍历:逐个访问字符
#include<iostream>
#include<string>
using namespace std;
int main() {
string s = "hellohiokhihellohehi";
int len = s.size();
// 遍历字符串每个字符
for (int i = 0; i < len; i++) {
// 输出单个字符,空格分隔
cout << s[i] << " ";
}
return 0;
}
解释:先获取字符串长度 len
,通过 for
循环和 s[i]
逐个访问字符并输出。
(四)string
修改操作
1. 字符删除(erase
)与清空(clear
)
#include<iostream>
#include<string>
using namespace std;
int main() {
string s = "Hello World";
// 删除从索引 5 开始到末尾的字符,结果为 "Hello"
s.erase(5);
cout << s << endl;
s = "Hello World";
// 从索引 1 开始,删除 3 个字符,结果为 "Ho World"
s.erase(1, 3);
cout << s << endl;
s = "Hello World";
s.clear(); // 清空字符串
cout << s << endl;
return 0;
}
解释:erase
可按位置和长度删除字符;clear
清空字符串内容。
2. 单个字符修改
#include<iostream>
#include<string>
using namespace std;
int main() {
string s = "Hello World";
s[0] = 'A'; // 将索引 0 处字符改为 'A',结果为 "Aello World"
cout << s << endl;
return 0;
}
解释:通过 s[索引] = 新字符
直接修改字符串单个字符。
3. 子串替换(replace
)
#include<iostream>
#include<string>
using namespace std;
int main() {
string s = "Hello World";
// 从索引 1 开始,替换 4 个字符为 "i",结果为 "Hi World"
s.replace(1, 4, "i");
cout << s << endl;
return 0;
}
解释:replace
按起始位置和长度,用新字符串替换原字符串子串。
四、总结
- 逻辑题:借数组标记状态,解决实际场景问题,学会将需求转化为代码逻辑。
string
操作:掌握输入输出、构造、遍历、修改(删除、替换、清空等),能灵活处理字符串相关任务。后续可多练习综合题目,强化知识运用!
0 条评论
目前还没有评论...