首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >杨校老师课堂之字符串——string

杨校老师课堂之字符串——string

原创
作者头像
杨校
发布2025-07-05 17:39:17
发布2025-07-05 17:39:17
18700
代码可运行
举报
文章被收录于专栏:C++信息学奥赛C++信息学奥赛
运行总次数:0
代码可运行

一、知识重点

C++ string 类的常用函数及相关工具的详细总结,按功能分类整理,附代码示例:

(一)字符串基础操作

函数

功能描述

示例代码

s.length()

返回字符串长度(字符数)

string s = "hello"; cout << s.length(); // 输出 5

s.empty()

判断字符串是否为空(等价于 s.length() == 0)

if (s.empty()) { ... }

s.clear()

清空字符串内容

s.clear(); // s 变为 ""

s.resize(n, c)

调整字符串长度为 n,新增字符用 c 填充(默认补 '\0')

s.resize(10, 'x'); // "hello" → "helloxxxxx"

(二)字符串修改操作

函数

功能描述

示例代码

s += t

字符串拼接(追加 t 到 s 末尾)

s += "world"; // "hello" → "helloworld"

s.append(t)

同 +=,支持追加子串(如 s.append(t, pos, len))

s.append("123", 1, 2); // 追加 "23"

s.push_back(c)

在字符串末尾添加单个字符 c

s.push_back('!'); // "hello" → "hello!"

s.pop_back()

删除字符串末尾的字符(C++11 起支持)

s.pop_back(); // "hello" → "hell"

s.insert(pos, t)

在位置 pos 插入字符串 t

s.insert(2, "xx"); // "hello" → "hexxllo"

s.erase(pos, len)

从位置 pos 开始删除 len 个字符(默认删到末尾)

s.erase(1, 2); // "hello" → "hlo"

s.replace(pos, len, t)

从位置 pos 开始的 len 个字符替换为 t

s.replace(1, 3, "XX"); // "hello" → "hXXo"

(三)字符串查找与比较

函数

功能描述

示例代码

s.find(t, pos)

从位置 pos 开始查找子串 t,返回首次出现的位置;未找到返回 string::npos

size_t idx = s.find("ll"); // 2

s.rfind(t, pos)

从位置 pos 开始反向查找子串 t,返回最后一次出现的位置

s.rfind("l"); // 3

s.substr(pos, len)

截取从位置 pos 开始的 len 个字符(默认到末尾)

string sub = s.substr(1, 3); // "ell"

s.compare(t)

字符串比较(字典序):0 相等,负数 s < t,正数 s > t

s.compare("hello"); // 0

s == t / s != t

直接比较字符串是否相等(推荐,更直观)

if (s == "hello") { ... }

(四)字符串迭代与遍历

函数

功能描述

示例代码

s.begin()

返回指向字符串首字符的迭代器

for (auto it = s.begin(); it != s.end(); ++it) { cout << *it; }

s.end()

返回指向字符串尾字符后一位的迭代器(空终止符 '\0' 之后)

// 配合 begin() 使用

s.rbegin()

返回反向迭代器,指向最后一个字符

for (auto rit = s.rbegin(); rit != s.rend(); ++rit) { ... }

s.rend()

返回反向迭代器,指向第一个字符前一位

// 用于逆序遍历

s[i]

随机访问第 i 个字符(下标从 0 开始),不检查越界

cout << s[2]; // 输出 'l'

s.at(i)

同 s[i],但会检查越界(越界时抛出 out_of_range 异常)

try { cout << s.at(10); } catch (const exception& e) { ... }

(五)字符串与数值的转换

函数

功能描述

示例代码

stoi(s, pos, base)

将字符串 s 转换为 int 类型,pos 存储转换后的位置,base 为进制(默认 10)

int num = stoi("123"); // 123

stol(s) / stoll(s)

转换为 long / long long 类型

long num = stol("1234567890");

stof(s) / stod(s)

转换为 float / double 类型

double d = stod("3.14");

to_string(num)

将数值(如 int、double)转换为字符串

string s = to_string(123.45); // "123.450000"

(六)字符串大小写转换

函数

功能描述

示例代码

tolower(c)

将字符 c 转为小写(需包含 <cctype>)

char c = tolower('A'); // 'a'

toupper(c)

将字符 c 转为大写

char c = toupper('b'); // 'B'

批量转换

结合 transform 和迭代器实现

transform(s.begin(), s.end(), s.begin(), ::tolower); // 全转小写

(七)字符串分割与处理(需配合其他工具)

工具

功能描述

示例代码

stringstream

字符串流,用于分割字符串(按空格、逗号等)

string s = "hello world"; stringstream ss(s); string word; while (ss >> word) { ... }

getline(cin, s)

读取一行输入(包含空格),存入字符串 s

string s; getline(cin, s); // 输入 "a b c" → s = "a b c"

regex(正则表达式)

复杂字符串匹配与替换(需包含 <regex>)

regex pattern("\\d+"); string s = regex_replace("a1b2c3", pattern, "X"); // "aXbXcX"

(八)注意事项
  1. 字符串长度与空终止符
    • s.length() 返回的是可见字符数,不包含字符串末尾的 '\0'(C++ 的 string 会自动管理 '\0')。


二、专项训练

1. 字符串的连接与比较

题目描述

输入四个字符串s1,s2,s3,s4,将s4的内容连接到s1的尾部,将s3的内容连接到s2的尾部,并比较新的s1与s2的大小,输出更大的字符串,若两字符串相等则输出:"~~~"

输入描述

四行,每行一个字符串。字符串的长度不超过100

输出描述

一行,比较后的结果。

样例

输入

WhatHappended?

WhereAreYou?

IAmNotSure.

Nothing!

输出

WhereAreYou?IAmNotSure.

提示

输入的字符串中不能有空格。

代码语言:javascript
代码运行次数:0
运行
复制
#include <iostream>
#include <string>

using namespace std;

int main(){
    
    string s1,s2,s3,s4;
    cin >> s1;
    cin >> s2;
    cin >> s3;
    cin >> s4;
    
    s1.append(s4);
    s2.append(s3);
    
    if(s1> s2){
        cout << s1;
    }else if(s1 == s2){
        cout << "~~~";
    } else{
         cout << s2;
    }
    
   

  return 0;
}

2. 找字典序最小的字符串

题目描述

编写程序,针对输入的N个不同的字符串,输出其中字典序最小的字符串。

输入描述

第一行输入一个正整数N, 随后N行,每行给出一个长度小于80的非空字符串,其中不会出现空格。

输出描述

输出字典序最小的字符串。

输入样例

5

Li

Wang

Zha

Jin

Xian

输出样例

Jin

数据范围

1≤N≤100

代码语言:javascript
代码运行次数:0
运行
复制
#include <iostream>
#include <string>
using namespace std;

int main() {
    int n;
    cin >> n;
    string min_str,current_str;  // 用于存储当前字典序最小的字符串
    cin >> min_str;  // 先读入第一个字符串作为初始的最小字符串

    for (int i = 1; i < n; i++) {
        cin >> current_str;
        if (current_str < min_str) {
            min_str = current_str;
        }
    }

    cout << min_str << endl;
    return 0;
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、知识重点
    • (一)字符串基础操作
    • (二)字符串修改操作
    • (三)字符串查找与比较
    • (四)字符串迭代与遍历
    • (五)字符串与数值的转换
    • (六)字符串大小写转换
    • (七)字符串分割与处理(需配合其他工具)
    • (八)注意事项
  • 二、专项训练
    • 1. 字符串的连接与比较
      • 题目描述
      • 输入描述
      • 输出描述
      • 样例
      • 提示
    • 2. 找字典序最小的字符串
      • 题目描述
      • 输入描述
      • 输出描述
      • 输入样例
      • 输出样例
      • 数据范围
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档