• C++
  • C++ 编程基础与字符串操作学习笔记

  • @ 2025-7-24 16:19:04

C++ 编程基础与字符串操作学习笔记

一、课程目标

  1. 掌握基础输入输出、数组应用,解决实际逻辑问题(判断同学是否到达)。
  2. 深入学习 string 字符串的多种操作,包括输入输出、构造、遍历、修改等。

二、基础逻辑题:判断未到达同学(数组应用)

(一)问题背景

老师组织春游,同学报编号,需根据报数判断哪些同学未到达。

(二)解题思路

  1. 用布尔数组 tong 标记同学是否到达,初始全为 false
  2. 读取报数,将对应编号的数组位置标记为 true
  3. 遍历所有同学编号,检查 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 按起始位置和长度,用新字符串替换原字符串子串。

四、总结

  1. 逻辑题:借数组标记状态,解决实际场景问题,学会将需求转化为代码逻辑。
  2. string 操作:掌握输入输出、构造、遍历、修改(删除、替换、清空等),能灵活处理字符串相关任务。后续可多练习综合题目,强化知识运用!

0 条评论

目前还没有评论...