当前位置: 首页 > article >正文

【STL笔记】字符串

字符串

下标从0开始,常规用法不再赘述,持续更新中…

1. substr(pos,len):
返回从位置 pos 开始,长度为 len 的子串。(len默认为npos)

std::string str = "Hello, World!";
std::string sub1 = str.substr(7, 5);  // 提取从索引 7 开始,长度为 5 的子串
std::string sub2 = str.substr(7);     // 提取从索引 7 开始直到字符串末尾的子串
std::cout << sub1 << std::endl;       // 输出 "World"
std::cout << sub2 << std::endl;       // 输出 "World!"

2. find(str/c,pos) :
查找字符串str或字符c,pos为开始查找的位置,默认为0
如果找到了目标,返回首次出现的位置(索引),如果没有找到,返回 std::string::npos (一个非常大的数,用于表示“无效位置”或“未找到”的情况)

std::string str = "Hello, World!";
size_t pos1 = str.find("World");  // 查找子字符串 "World"
size_t pos2 = str.find('o');      // 查找字符 'o'
size_t pos3 = str.find("world");  // 查找子字符串 "world"(区分大小写)
std::cout << pos1 << std::endl;  // 输出 7
std::cout << pos2 << std::endl;  // 输出 4
std::cout << pos3 << std::endl;  // 输出 std::string::npos,因为没有找到

3. replace(pos,len,替换内容):
用于替换字符串中的一部分内容。
pos:要替换的起始位置。
len:要替换的字符数。
替换内容 :
str (字符串)
str,subpos,sublen (字符串子串)
n,c(n个字符c)
返回值:返回替换后的字符串(本身修改,返回引用)

std::string str = "Hello, World!";
str.replace(7, 5, "C++");  // 将 "World" 替换为 "C++"
std::cout << str << std::endl;  // 输出 "Hello, C++!"

str.replace(0, 5, 3,'H');  // 将 "Hello" 替换为3个"H"
std::cout << str << std::endl;  // 输出 "HHH, C++!"

4. erase(pos,len):
用于删除字符串中的一部分。
pos:要删除的起始位置。
len:要删除的字符数,默认为 std::string::npos,表示删除从 pos 到字符串末尾的所有字符。
返回值:返回删除后的字符串(本身修改,返回引用)。

std::string str = "Hello, World!";
str.erase(5, 7);  // 删除从索引 5 开始,长度为 7 的子串
std::cout << str << std::endl;  // 输出 "Hello!"

5. insert(pos,插入内容) 函数
用于在字符串的指定位置插入新的字符或子字符串。
pos:要插入的位置。
插入内容:
str:要插入的字符串。
s:要插入的 C 字符串。
n ,c:要插入的字符和数量。
返回值:返回插入后的字符串(本身修改,返回引用)。

std::string str = "Hello!";
str.insert(5, " World");  // 在索引 5 位置插入 " World"
std::cout << str << std::endl;  // 输出 "Hello World!"

str.insert(0, "Say ");  // 在字符串开始位置插入 "Say "
std::cout << str << std::endl;  // 输出 "Say Hello World!"

6. getline :
getline(cin,s) 可以从输入流读取一整行数据。
注意事项:在前面用cin读取了一个整数后,要先将剩余的换行符清除,否则getline会把这单个换行符读为s。实测cin.ignore()最好用。

int main() {
    cin.tie(0)->ios::sync_with_stdio(0); // 开完这行后getchar会出错,所以最好用cin.ignore
    int n;
    cin>>n;
    // getchar();  
    cin.ignore();  // 忽略掉多余的换行符
    string line;
    getline(cin,line);   
        cout<<line;
    return 0;
}

7. 整形字符串转化、逆序

    // 将整型数字转换为字符串
    string str = to_string(number);

    // 将一个容器逆序
    reverse(str.begin(), str.end());
    
    // 将逆序后的字符串转换回整型
    int reversedNumber = stoi(str);

8. 比大小:
字符串可以直接比较,会按照字典序进行比较,也可以sort排序。

实战演练 : 打败猫娘

#include <bits/stdc++.h>
#define endl '\n'
#define int long long
typedef long long ll;
using namespace std;

signed main() {
    cin.tie(0)->ios::sync_with_stdio(0);
    int N;
    cin>>N;
    cin.ignore();
    string b[101];
    for(int i=0;i<N;i++){
        getline(cin,b[i]);
    }
    int k;
    cin>>k;
    cin.ignore();
    string s;
    string thc="@!";  //将违禁词暂时替换为为"@!" 
    getline(cin,s);
    int cnt=0;
    for(int i=0;i<N;i++){
        while(s.find(b[i])!=s.npos){
            s.replace(s.find(b[i]),b[i].length(),thc);
            cnt++;
        }
    }
    while( s.find(thc) != s.npos){
            s.replace(s.find(thc),2,"<censored>");
        }
    if(cnt<k)
        cout<<s;
    else{
        cout<<cnt<<endl<<"He Xie Ni Quan Jia!"<<endl;
    }
    return 0;
}

http://www.kler.cn/a/524747.html

相关文章:

  • vue3中customRef的用法以及使用场景
  • 【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章
  • 使用CSS实现一个加载的进度条
  • 【每日一A】2015NOIP真题 (二分+贪心) python
  • 分布式微服务系统架构第88集:kafka集群
  • [权限提升] Windows 提权 — 系统内核溢出漏洞提权
  • 免杀国内主流杀软的恶意样本分析
  • C++:多继承习题4
  • 【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(三)
  • Windows 程序设计6:错误码的查看
  • 实验十 数据库完整性实验
  • World Creator地形导入UE
  • 如何在gitee/github上面搭建obsidian的图床
  • Synology 群辉NAS安装(8)安装jira前的用户和组的准备
  • 【使用Apache Flink 实现滑动窗口流式计算】
  • 灰色预测模型
  • 实现前端当中的页面过渡动画
  • 如何监控公司网络与 WorkWin 软件应用解析:办公效能提升路径探究
  • BASE基本理论你了解吗?
  • Java Web 开发基础介绍
  • 最近最少使用算法(LRU最近最少使用)缓存替换算法
  • 大数据相关职位介绍之二(数据治理,数据库管理员, 数据资产管理师,数据质量专员)
  • 谈谈出国留学文书PS写作中的注意事项
  • 认识小程序的基本组成结构
  • Synology 群辉NAS安装(9)安装jira
  • 学术方向选则与规划DeepSeek、ChatGPT和Kimi对比