• C++
  • C++字符串操作入门

  • @ 2025-7-14 17:19:28

C++字符串操作入门教程

一、字符串基础

在C++中,字符串是由多个字符组成的序列。处理字符串是编程中的常见任务,比如文本替换、格式处理、排序等。下面我们通过具体案例来学习字符串操作的核心知识。

1.1 字符串的输入输出

C++中处理字符串常用string类型,需要包含头文件<string>

两种主要输入方式:

  • cin >> str:读取字符串,遇到空格或换行停止
  • getline(cin, str):读取一整行字符串,包括空格
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s1, s2;
    
    // 方式1:使用cin读取(不包含空格)
    cin >> s1;
    cout << "cin读取的内容:" << s1 << endl;
    
    // 注意:使用cin后如果要立即使用getline,需要处理残留的换行符
    cin.ignore(); // 忽略缓冲区中的换行符
    
    // 方式2:使用getline读取整行(包含空格)
    getline(cin, s2);
    cout << "getline读取的内容:" << s2 << endl;
    
    return 0;
}

二、字符串遍历与修改

2.1 替换字符(例5.15)

题目需求:将字符串中所有指定字符A替换为字符B

解题思路

  1. 读取原始字符串
  2. 读取要替换的字符对(A和B)
  3. 遍历字符串,逐个检查并替换字符
  4. 输出替换后的字符串
#include <iostream>
#include <string>
using namespace std;

int main() {
    string str;
    // 读取一整行原文(包含空格)
    getline(cin, str);
    
    char a, b;
    // 读取要替换的两个字符
    cin >> a >> b;
    
    // 获取字符串长度
    int len = str.size();
    
    // 遍历字符串中的每个字符
    for (int i = 0; i < len; i++) {
        // 如果当前字符是a,则替换为b
        if (str[i] == a) {
            str[i] = b;
        }
    }
    
    // 输出替换后的结果
    cout << str;
    return 0;
}

代码说明

  • str.size():获取字符串长度
  • str[i]:访问字符串中第i个字符(下标从0开始)
  • 循环遍历每个字符,进行条件判断和替换

2.2 过滤空格(例5.16)

题目需求:将字符串中连续的多个空格替换为单个空格

解题思路

  1. 读取包含多个连续空格的字符串
  2. 遍历字符串,遇到空格时特殊处理
  3. 只保留第一个空格,跳过后续连续的空格
  4. 输出处理后的字符串

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str;
    // 读取带空格的整行字符串
    getline(cin, str);
    
    string result; // 用于存储处理后的字符串
    bool lastIsSpace = false; // 标记上一个字符是否为空格
    
    for (int i = 0; i < str.size(); i++) {
        if (str[i] == ' ') { // 当前字符是空格
            if (!lastIsSpace) { // 如果上一个不是空格,就添加这个空格
                result += str[i];
                lastIsSpace = true;
            }
            // 如果上一个是空格,就不添加,相当于过滤掉多余空格
        } else { // 当前字符不是空格
            result += str[i]; // 直接添加
            lastIsSpace = false; // 重置标记
        }
    }
    
    cout << result << endl;
    return 0;
}

代码说明

  • 使用bool类型变量lastIsSpace记录上一个字符状态
  • 通过状态判断决定是否添加当前字符,实现空格过滤
  • result += str[i]:字符串拼接操作

三、字符串数组与排序

3.1 串排序(例5.18)

题目需求:对多个字符串按字母顺序排序并输出

解题思路

  1. 读取字符串数量n
  2. 读取n个字符串存储到数组中
  3. 使用sort函数对字符串数组排序
  4. 输出排序后的结果
#include <iostream>
#include <string>
#include <algorithm> // 包含sort排序函数
using namespace std;

int main() {
    int n;
    cin >> n;
    
    // 定义字符串数组,大小为200(题目要求n≤20)
    string words[200];
    
    // 读取n个字符串
    for (int i = 0; i < n; i++) {
        cin >> words[i];
    }
    
    // 对字符串数组排序,sort函数默认按字母升序排列
    // 参数:起始地址,结束地址(最后一个元素的下一个位置)
    sort(words, words + n);
    
    // 输出排序结果
    for (int i = 0; i < n; i++) {
        cout << words[i] << endl;
    }
    
    return 0;
}

代码说明

  • #include <algorithm>:使用sort函数必须包含的头文件
  • sort(words, words + n):对数组从第0个元素到第n-1个元素排序
  • 字符串比较规则:按字母ASCII值从小到大,与字典排序规则一致
  • 数组下标也可以从1开始(如用户提供的代码示例),两种方式均可

四、文件操作基础

4.1 文件重定向(freopen)

除了从键盘输入和屏幕输出,还可以通过文件进行输入输出,使用freopen函数实现:

#include <iostream>
#include <cstdio> // 包含freopen函数
using namespace std;

int main() {
    // 将标准输入重定向到data.txt文件
    freopen("data.txt", "r", stdin);
    // 将标准输出重定向到output.txt文件
    freopen("output.txt", "w", stdout);
    
    // 接下来的cin都会从data.txt读取,cout都会输出到output.txt
    int num;
    while (cin >> num) { // 从文件读取数据
        cout << num * 2 << endl; // 输出到文件
    }
    
    // 关闭文件(可选,程序结束会自动关闭)
    fclose(stdin);
    fclose(stdout);
    
    return 0;
}

代码说明

  • freopen("文件名", "模式", 流):重定向函数
    • 模式"r":只读(用于输入)
    • 模式"w":只写(用于输出)
  • 常用于调试程序时固定输入数据,避免反复手动输入

五、综合练习与拓展

5.1 常见字符串操作总结

操作 代码示例 说明
获取长度 str.size() 返回字符串字符数
访问字符 str[i] 访问第i个字符(0开始)
字符串拼接 str1 + str2 合并两个字符串
字符串比较 str1 == str2 判断是否相等,支持>、<等
查找字符 str.find('a') 查找字符第一次出现的位置
截取子串 str.substr(pos, len) 从pos开始截取len个字符

5.2 GESP二级考试相关题目

根据GESP二级考试要求,以下题目需要重点掌握:

  1. 小杨做题(B3923):涉及分数统计与条件判断
  2. 时间跨越(B4260):时间计算与转换
  3. 数三角形(B4356):几何图形计数

这些题目虽然不完全是字符串操作,但都需要运用类似的逻辑思维和循环控制能力。

六、学习建议

  1. 多动手实践:每个知识点都要编写代码实际运行,观察结果
  2. 调试技巧:学会使用断点调试,观察变量变化过程
  3. 循序渐进:先掌握字符串基本操作,再学习数组和排序
  4. 错题整理:记录易错点,如字符串输入时的换行符处理
  5. 拓展练习:完成基础题目后,尝试更复杂的字符串处理任务

通过以上内容的学习,你已经掌握了C++字符串操作的核心知识,这些知识不仅是编程入门的基础,也是GESP等编程等级考试的重点内容。勤加练习,才能熟练运用!

0 条评论

目前还没有评论...