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

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;
}

相关文章:

  • 几个MySQL系统调优工具
  • 03-工具篇-SSH远程登录ubuntu系统
  • Kubernetes in action-机理
  • 【Web前端】jQuery入门与基础(一)
  • ISO 26262-5 评估硬件随机失效率
  • Linux—进程池实现
  • C++题解(33)2025年顺德区中小学生程序设计展示活动(初中组C++)U560876 美丽数(一)和 U560878 美丽数(二)题解
  • Python之两个爬虫案例实战(澎湃新闻+网易每日简报):附源码+解释
  • 爬虫核心概念与工作原理详解
  • AI专题:如何把DeepSeek变成你的AI个人助手
  • 《2.2.1顺序表的定义|精讲篇》
  • 消息中间件之kafka
  • Linux-读者写著问题和读写锁
  • 香橙派3B学习笔记2:Vscode远程SSH登录香橙派_权限问题连接失败解决
  • 每日Prompt:梦回大唐
  • 阿斯利康医学代表在线测评笔试题库 | 3天备考、能力测评、性格测评历年真题 | 华东同舟求职讲求职
  • Day 30 训练
  • DOM事件的注册和移除
  • 基于大模型的髋关节骨关节炎预测与治疗方案研究报告
  • 题解:P12518 「MSTOI-R1」Easy question
  • 泰安网信科技/保定seo排名外包
  • 域名申请通过了网站怎么做/百度刷排名seo
  • 自己做电商网站./国家职业技能培训学校
  • 不用付费就可以看亏亏的app/大地seo视频
  • 潍坊营销型网站制作/深圳排名seo
  • 腾云建站官网/2345网址导航是什么浏览器