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

C++STL之string

string的基本概念:

在C++中string是一个类 可以自动扩容

sting a = "XXX";//string类的定义初始化

在头文件iostream中包括了头文件string


 string 对象创建

#include <iostream>
#include <string>
using namespace std;int main() {// 1. 无参构造string s1;cout << s1 << endl;// 2. 初始化列表string s2({ 'h', 'e', 'l', 'l', 'o' });cout << s2 << endl;// 3. 字符串初始化string s3("英雄哪里出来");cout << s3 << endl;// 4. 字符串的前n个字符string s4("英雄哪里出来", 6);cout << s4 << endl;string s41("英雄哪里出来", 5);cout << s41.size() << endl;cout << (int)s41[4] << endl;cout << s41 << endl;// 5. 拷贝构造string s5(s4);cout << s5 << endl;// 6. a 个字符 bstring s6(8, 'o');cout << s6 << endl;return 0;
}

string 赋值操作

#include <iostream>
#include <string>
using namespace std;int main() {// 1. 字符串常量的赋值string s1;s1 = "英雄哪里出来";cout << s1 << endl;// 2. 字符串变量的赋值string s2;s2 = s1;cout << s2 << endl;// 3. 字符赋值(单字符)string s3;s3 = 'x';cout << s3 << endl;// 4. assign v1string s4;s4.assign("英雄算法联盟");cout << s4 << endl;// 5. assign v2(截取前8字节)string s5;s5.assign("英雄算法联盟", 8);  // 每个中文字符占3字节(UTF-8)cout << s5 << endl;// 6. assign v3(拷贝对象)string s6;s6.assign(s5);cout << s6 << endl;// 7. assign v4(重复字符)string s7;s7.assign(8, 'o');          // 生成8个'o'cout << s7 << endl;return 0;
}

字符串的拼接

#include <iostream>
#include <string>
using namespace std;int main() {// 1. + 运算符示例string s1 = "英雄";string t1 = "出来";s1 = s1 + "哪里";s1 = s1 + t1;s1 = s1 + ';';cout << s1 << endl;// 2. += 运算符示例string s2 = "夜深";string t2 = "写算法";s2 += "人静";    // const char*s2 += t2;        // const string&s2 += ',';       // charcout << s2 << endl;// 3. append 方法示例string s3 = "英雄";string t3 = "联盟";s3.append("算法");               // 追加字符串字面量s3.append(t3);                   // 追加字符串对象s3.append("5201314", 3);         // 取前3个字符("520")s3.append("5201314", 3, 4);      // 从位置3取4个字符("1314")cout << s3 << endl;// 4. push_back 方法示例string s4 = "英雄编程";s4.push_back('6');s4.push_back('6');s4.push_back('6');s4.push_back(';');cout << s4 << endl;return 0;
}


string 比较操作

#include <iostream>
#include <string>
using namespace std;int main() {// 初始化测试字符串string s1 = "aab";  // 主比较字符串string sl = s1;      // 保持与之前代码的兼容性// 1. compare 方法测试string t11 = "aab";int r11 = sl.compare(t11);cout << sl << " compare " << t11 << " -> " << r11 << endl;string t12 = "aaa";int r12 = sl.compare(t12);cout << sl << " compare " << t12 << " -> " << r12 << endl;string t13 = "aac";int r13 = sl.compare(t13);cout << sl << " compare " << t13 << " -> " << r13 << endl;string t14 = "aaba";int r14 = s1.compare(t14);cout << s1 << " compare " << t14 << " -> " << r14 << endl;string t15 = "aa";int r15 = s1.compare(t15);cout << s1 << " compare " << t15 << " -> " << r15 << endl;// 2. 关系运算符测试cout << "\n关系运算符测试:" << endl;cout << s1 << " == " << t11 << " -> " << (s1 == t11) << endl;  // 修正原题中的错误逻辑cout << s1 << " != " << t11 << " -> " << (s1 != t11) << endl;cout << s1 << " <  " << t12 << " -> " << (s1 < t12) << endl;cout << s1 << " >  " << t13 << " -> " << (s1 > t13) << endl;return 0;
}


string 随机访问

#include <iostream>
#include <string>
using namespace std;int main() {string s = "I love you 1314";// 1. 访问字符cout << "原始字符串: " << s << endl;// 使用 [] 访问cout << "使用 [] 访问字符: ";for (int i = 0; i < s.size(); ++i) {cout << s[i] << " ";}cout << endl;// 使用 at() 访问cout << "使用 at() 访问字符: ";for (int i = 0; i < s.size(); ++i) {cout << s.at(i) << " ";}cout << endl;// 2. 修改字符s[11] = '5';       // 正确修改索引11的字符(原为 '1' → '5')s[12] = '2';       // 正确修改索引12的字符(原为 '3' → '2')s.at(13) = '0';    // 修正语法错误:"当" → "=",修改索引13(原为 '1' → '0')s.at(14) = '0';    // 修正空字符错误:'' → '0',修改索引14(原为 '4' → '0')cout << "修改后字符串: " << s << endl;return 0;
}

string 数据插入

#include <iostream>
#include <string>
using namespace std;int main() {string s1 = "Heworld";s1.insert(2, 2, 'l');cout << s1 << endl;s1.insert(4, "o ");cout << s1 << endl;s1.insert(s1.size(), "嘿嘿嘿");cout << s1 << endl;s1.insert(s1.begin(), ':');cout << s1 << endl;return 0;
}

string字符的删除

#include <iostream>
#include <string>
using namespace std;int main() {string s1;// 1s1 = "Hello woooorld";s1.erase();cout << "1: " << s1 << endl;// 2s1 = "Hello woooorld";s1.erase(7);cout << "2: " << s1 << endl;// 3s1 = "Hello woooorld";s1.erase(7, 3);cout << "3: " << s1 << endl;// 4s1 = "Hello woooorld";s1.erase(s1.begin());cout << "4: " << s1 << endl;// 5s1 = "Hello woooorld";s1.erase(s1.begin()+7, s1.begin()+10);cout << "5: " << s1 << endl;return 0;
}

string 数据查找

#include <iostream>
#include <string>
using namespace std;int main() {string s1;// 1s1 = "Hello woooorld";cout << s1.find("oooo") << endl;// 2cout << (int)s1.find("oooo", 8) << endl;cout << s1.find("oooo", 5) << endl;// 3cout << s1.find('o') << endl;cout << s1.find('o', s1.find('o') + 1) << endl;// 4cout << s1.rfind("oo") << endl;return 0;
}

 rfind从右边开始查找 

将fine的类型强制转换为int类型 发现 若未找到 则输出-1(if判断的条件)


string 数据替换

#include <iostream>
#include <string>
using namespace std;int main() {string s;// 1s = "Hello woooorld";s.replace(7, 5, "or");cout << s << endl;// 2s = "Hello woooorld";s.replace(s.begin() + 7, s.begin() + 12, "or");cout << s << endl;// 3s = "Hello woooorld";s.replace(s.begin() + 7, s.begin() + 12, "oranddjkgfjdfigjkdfgdfj", 2);cout << s << endl;return 0;
}

string 子串获取

#include <iostream>
#include <string>
using namespace std;int main() {string s1;s1 = "Hello woooorld";string subStr = s1.substr(7, 4);cout << "从s1提取的子串: " << subStr << endl;string s2 = "英雄哪里出来&&夜深人静写算法";int pos = s2.find("&&");string s3 = s2.substr(0, pos);string s4 = s2.substr(pos + 2);cout << "s2分割后的第一部分: " << s3 << endl;cout << "s2分割后的第二部分: " << s4 << endl;return 0;
}

http://www.xdnf.cn/news/554275.html

相关文章:

  • 产业互联网+三融战略:重构企业增长密码
  • 人工智能+:职业技能培训的元命题与能力重构
  • Linux 正则表达式 扩展正则表达式 gawk
  • 101个α因子#8
  • Java DTO 深度解析
  • JUC编程monitor、锁膨胀以及相关关键字
  • 定时从接口下载数据到本地
  • 免费插件集-illustrator插件-Ai插件-路径尖角圆角化
  • 天然产物在食品医药美妆领域的创新应用研究
  • 图像噪声模拟
  • 安装PostgreSQL
  • 解决javafx组件缺失导致运行程序报错的问题
  • Spring Boot中的分布式缓存方案
  • PID项目---硬件设计
  • Javascript 编程基础(2)基础知识 | 2.3、语法规则
  • 操作系统----软考中级软件工程师(自用学习笔记)
  • 循环神经网络
  • 机器人编程基础---C语言中的高级特性
  • upload-labs通关笔记-第13关 文件上传之白名单POST法
  • 旧物回收系统:撬动绿色经济新支点,开启循环未来新篇章
  • 区县与地级市和省会的距离
  • LW-CTrans:一种用于三维医学图像分割的轻量级CNN与Transformer混合网络|文献速递-深度学习医疗AI最新文献
  • JavaScript 性能优化:调优策略与工具使用
  • NumPy 2.x 完全指南【十三】复制和视图
  • 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第十三讲)
  • 口腔牙科小程序源码介绍
  • 多线程下如何保证事务的一致性
  • AliSQL:阿里巴巴开源数据库的技术革新与应用实践
  • idea查看class文件源码
  • OpenAI Codex 加入Agent编程工具新阵营