2025.2.24(数据与结构c++)顺序表的插入与删除 记住c++头文件背诵
在ptq上做了两个编程题作业,分别是字符表的插入与删除。
里面了解到了一个第一次见的用法:
while(cin>>...)的用法为多次读入。适用于多组数据(或不知道几组),其结束的标志是循环读入直到无数据or读到无效数据。附图

今天的作业不是用老师上课的方法写的,老师教的目前看懂了一些些。等会再看看。
插入的题目如图:

下面我用ai帮我生成我写的代码注释
点击查看代码
#include <iostream>
using namespace std;
int main() {
int n; // 数组初始长度
char x, y; // x: 要插入的字符,y: 要查找的目标字符
// 持续读取输入,直到遇到EOF或输入错误
while (cin >> n >> y >> x) {
int t = 0; // 标记是否找到y,0未找到,1找到
int j; // 记录y的位置
char a[n + 1]; // 多分配1个空间用于插入操作
for (int i = 0; i < n; i++) {
cin >> a[i];
}
// 查找y的位置
for (int i = 0; i < n; i++) {
if (a[i] == y) {
t = 1; // 标记找到
j = i; // 记录y的位置(下标)
}
}
if (t == 1) { // 如果找到y
// 元素后移操作(从后向前移动)
for (int i = n; i > j; i--) { // i从n开始(利用额外分配的空间)
a[i] = a[i - 1]; // 后移元素
}
a[j] = x; // 插入新元素
// 输出插入后的数组(共n+1个元素)
for (int i = 0; i <= n; i++) {
cout << a[i];
}
cout << endl;
} else if (t == 0) { // 未找到y的情况
cout << "not found y" << endl;
}
}
return 0;
}
3. 变长数组(VLA):char a[n+1] 不符合C++标准,建议改用:
vector<char> a(n+1); // 需要包含<vector>
或动态分配:char* a = new char[n+1];(上课内容,还不了解。。。。)
代码怎么退出啊。。sos。。<details>
***************************************************************
点击查看代码
#include <iostream>
using namespace std;
int main() {
int n; // 要处理的数组初始长度
char x; // 要删除的目标字符
// 持续读取输入直到遇到EOF或错误
while (cin >> n >> x) {
int j; // 记录目标字符位置
int t = 0; // 查找标记:0未找到,1找到
// 正确做法应使用vector或动态内存分配(待学习中,。。。)
char a[n + 1]; // 分配n+1空间(实际只需n空间,此处设计存疑)!
// 读取原始数组(注意:实际只使用前n个位置)
for (int i = 0; i < n; i++)
cin >> a[i]; // 正确读取n个元素到a[0]~a[n-1]
// 查找第一个目标字符
for (int i = 0; i < n; i++) {
if (a[i] == x) { // 正确使用比较运算符
t = 1;
j = i;
break; // 正确:找到第一个立即退出
}
}
if (t == 1) {
// 删除操作(实际是覆盖操作)
// ⚠️危险循环:当i=n-1时,a[i+1]即a[n]是未初始化的内存
for (int i = j; i < n; i++) {
a[i] = a[i + 1]; // 最后一个操作a[n-1] = a[n](访问越界)
}
// 输出处理后的数组(实际输出n-1个元素)
// ⚠️注意:当n=0时会出错,但题目场景中n应>=1
for (int i = 0; i < n - 1; i++)
cout << a[i]; // 输出前n-1个元素
cout << endl;
} else {
cout << "not found" << endl; // 正确的未找到处理
}
}
return 0;
}

浙公网安备 33010602011771号