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

csp备考Day1|string和vector

csp备考Day1|string和vector

基础知识

1. vector

// 初始化
vector<int> v1;                     // 空vector
vector<int> v2(5, 0);               // 5个0
vector<int> v3 = {1, 2, 3};         // 列表初始化// 关键API
v.push_back(x);                     // 尾部插入元素(优先用emplace_back更高效)
v.pop_back();                       // 删除尾部元素
v.size();                           // 元素个数(非容量!)
v.reserve(100);                     // 预分配空间(避免扩容耗时)
v.erase(v.begin()+2);               // 删除第3个元素(注意迭代器失效问题)
sort(v.begin(), v.end());           // 排序(默认升序)

2. string

// 初始化
string s1 = "hello";
string s2(5, 'a');                  // "aaaaa"// 关键API
s.substr(start_pos, length);        // 截取子串(若省略length则到末尾)
s.find("ll");                       // 返回首次出现的位置(未找到返回string::npos)
s.replace(pos, len, "new_str");     // 替换指定位置
s.insert(pos, "insert");            // 插入字符串
stoi(s);                            // 字符串转整数(注意异常处理)
to_string(123);                     // 数字转字符串

练习题

题目1:字符串分割

一维

题目描述
输入一个字符串(例如 "a,bc,def")和一个分隔符(例如 ','),输出分割后的字符串数组。
示例输入/输出
输入:s = "hello,world,cpp", delimiter = ','
输出:["hello", "world", "cpp"]

关键思路

  1. 遍历字符串,记录非分隔符的起始位置 start
  2. 遇到分隔符时,截取 start 到当前位置的子串
  3. 处理最后一个子串

参考代码

vector<string> split(const string& s, char delimiter) {vector<string> res;int start = 0;for (int i = 0; i < s.size(); i++) {if (s[i] == delimiter) {res.emplace_back(s.substr(start, i - start));start = i + 1;}}if (start <= s.size()) { // 处理最后一个子串res.emplace_back(s.substr(start));}return res;
}
二维

给你一个字符串数组 words 和一个字符 separator ,请你按 separator 拆分 words 中的每个字符串。

返回一个由拆分后的新字符串组成的字符串数组,不包括空字符串

注意

  • separator 用于决定拆分发生的位置,但它不包含在结果字符串中。

  • 拆分可能形成两个以上的字符串。

  • 结果字符串必须保持初始相同的先后顺序。

    示例 1:

    输入:words = ["one.two.three","four.five","six"], separator = "."
    输出:["one","two","three","four","five","six"]
    解释:在本示例中,我们进行下述拆分:"one.two.three" 拆分为 "one", "two", "three"
    "four.five" 拆分为 "four", "five"
    "six" 拆分为 "six" 因此,结果数组为 ["one","two","three","four","five","six"] 。
    

    示例 2:

    输入:words = ["$easy$","$problem$"], separator = "$"
    输出:["easy","problem"]
    解释:在本示例中,我们进行下述拆分:"$easy$" 拆分为 "easy"(不包括空字符串)
    "$problem$" 拆分为 "problem"(不包括空字符串)因此,结果数组为 ["easy","problem"] 。
    

    示例 3:

    输入:words = ["|||"], separator = "|"
    输出:[]
    解释:在本示例中,"|||" 的拆分结果将只包含一些空字符串,所以我们返回一个空数组 [] 。 
    
class Solution {
public:vector<string> splitWordsBySeparator(vector<string>& words, char separator) {vector<string> res;for(string& s : words){int start=0;for(int j=0;j<s.size();j++){if(s[j]==separator){if(j>start){res.emplace_back(s.substr(start,j-start));                 }start=j+1;}        }if(start<s.size()){res.emplace_back(s.substr(start));}}       return res;}
};

题目2:高精度加法

题目描述
输入两个表示正整数的字符串(长度≤1000),输出它们的和(字符串形式)。
示例输入/输出
输入:num1 = "999", num2 = "9999"
输出:"10998"

关键思路

  1. 逆序处理每一位,相加并处理进位
  2. 结果反向得到最终字符串

参考代码

string addStrings(string num1, string num2) {int i = num1.size()-1, j = num2.size()-1;int carry = 0;vector<int> res;while (i >= 0 || j >= 0 || carry > 0) {int a = (i >= 0) ? num1[i--]-'0' : 0;int b = (j >= 0) ? num2[j--]-'0' : 0;int sum = a + b + carry;res.push_back(sum % 10);carry = sum / 10;}string ans;for (int k = res.size()-1; k >= 0; k--) {ans += to_string(res[k]);}return ans;
}
http://www.xdnf.cn/news/8533.html

相关文章:

  • BSDIFF算法详解
  • 2025陕西ICPC邀请赛题解(部分)
  • JVM学习(五)--执行引擎
  • 内容中台的数字化管理核心是什么?
  • 使用Spring Boot和Redis实现高效缓存机制
  • 网络安全给数据工厂带来的挑战
  • 25年软考架构师真题(回忆更新中)
  • 深度学习——超参数调优
  • 前端框架token相关bug,前后端本地联调
  • SGlang 推理模型优化(PD架构分离)
  • 从脑电图和大脑记录中学习稳健的深度视觉表征
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(二十六) -> 创建端云一体化开发工程
  • 廉价却有效?ESD防护中的电容
  • 微前端架构:从单体到模块化的前端新革命
  • 【MySQL系列】 MySQL 中的 TINYINT 类型
  • C/C++STL---<chrono>
  • [SWPUCTF 2021 新生赛]简简单单的解密
  • CDGA|一线二线企业数据治理项目目前发展状况
  • 运维实施36-逻辑卷管理 (LVM)
  • 【国产OS】国产麒麟OS部署个人方法汇总
  • VirtualBox 4.3.10 经典版安装教程 - Windows 7/10 下载与设置指南
  • GESP编程等级认证C++三级8-字符串1
  • 【Day34】
  • 一文详解 HLS
  • siparmyknife:SIP协议渗透测试的瑞士军刀!全参数详细教程!Kali Linux教程!
  • Python 训练营打卡 Day 33
  • AI浪潮下,媒体内容运营的五重变奏
  • 安卓新建项目时,Gradle下载慢下载如何用国内的镜像
  • 什么是Express
  • MCP Server 实践之旅第 3 站:MCP 协议亲和性的技术内幕