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

C++ string类常用操作

文章目录

  • auto
  • 范围for
  • string类常用接口
    • string类对象常见得构造
    • string类对象得修改操作
    • string类对象得容量操作
    • string类对象的访问及遍历操作
    • string类对象的修改操作
    • string类输入

  在使用string类时,必须包含头文件。

#include<string>
using namespace std;

auto

  1.auto声明的变量必须由编译器在编译时期推导而得。
  2.用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须加&。
  3.auto不能作为函数的参数,可以做返回值,但是建议谨慎使用。
  4.auto不能直接用来声明数组。

void Test() {int a = 10;auto b = a;auto c = 'a';cout << typeid(b).name() << endl;  //intcout << typeid(c).name() << endl;  //char
}

范围for

  1.对于一个有范围的集合而言,for循环后的括号由冒号 : 分为两部分,第一部分时范围内用于迭代的遍历。第二部分则表示被迭代的范围,自动迭代,自动获取数据,自动判断结束。
  2.范围for可以作用到数组和容器对象上进行遍历。
  3.范围for的容器遍历实际上就是替换为迭代器。

void Test() {int array98[] = { 1,2,3,4,5,6 };for (int i = 0; i < sizeof(array98) / sizeof(array98[0]); ++i) {array98[i] *= 2;}for (int i = 0; i < sizeof(array98) / sizeof(array98[0]); ++i) {cout << array98[i] << " ";}//运行结果 2 4 6 8 10 12cout << endl;int array11[] = { 1,2,3,4,5,6 };for (int ch : array11) {ch *= 2;}for (int ch : array11) {cout << ch << " ";}//运行结果 1 2 3 4 5 6cout << endl;
}

在以上代码中,普通的遍历会改变数组原有的值,在范围for中,遍历不会改变原有的值。本质是,范围for的遍历是对原有值得复制 ,对复制得值进行操作,不会改变原有得值。

string类常用接口

string类对象常见得构造

  1.构造空得string类对象。

void Test() {//string(); //构造空得string类对象string s1;cin >> s1;cout << s1 << endl;
}

  2.将c格式字符串构造string类对象。

void Test() {//string(const char* s) //将c格式字符串构造string类对象string s2("123");cout << s2 << endl;
}

  3.拷贝构造。

void Test() {	string s2("123");//string(const string& str); //拷贝构造string s3(s2);cout << s3 << endl;
}

string类对象得修改操作

  1.从str中pos位置开始,截取n个字符,然后将其返回。

void Test() {string s1("hello world");//长度超过最大下标,默认在最后一个字符结束//string(const string& str, size_t pos, size_t n);string s2(s1, 6, 3); //下标,长度cout << s2 << endl;//运行结果 worstring s3;s3 = s1.substr(6, 3); //下标,长度cout << s3 << endl;//运行结果 worstring s4(s1, 6);cout << s4 << endl;//运行结果 world
}

  2.初始化前n个字符。

void Test13() {string s1("hello world",5);cout << s1 << endl;//运行结果 hello
}

  3.连续的n个字符初始化

void Test1() {//连续的n个字符初始化//string(size_t n, char c);string s1(10, 'x');cout << s1 << endl;//运行结果 xxxxxxxxxx
}

string类对象得容量操作

  1.返回字符串有效长度。size()与length()方法底层实现原理完全相同,引入size()得原因是为了与其他容器得接口保持一致,一般情况下基本都是用size()。
size()

void Test() {string s1("hello world");cout << s1.size() << endl;//运行结果 11
}

length()

void Test() {string s1("hello world");cout << s1.length() << endl;//运行结果 11
}

  2.返回空间总大小。
空间总大小不包含 \0

void Test() {string s1("hello world");cout << s1.capacity() << endl;//运行结果 15
}

  3.检测字符串是否为空串, 是返回true,否则返回false。

void Test() {string s1("hello world");cout << s1.empty() << endl;//运行结果 0(false)string s2;cout << s2.empty() << endl;//运行结果 1(true)
}

  4.清空有效字符。clear()只是将string中有效字符清空,不改变底层空间大小。
只清数据不清空间。

void Test() {string s1("hello world");cout << s1.size() << endl;  //11cout << s1.capacity() << endl;  //15s1.clear();cout << s1.size() << endl; //0cout << s1.capacity() << endl; //15
}

  5.为字符出啊预留空间。reserve为string预留空间,不改变有效元素个数,当reserve的参数小于string的底层空间总大小时,reserve不会改变容量大小。
本质是扩充容量。

void Test13() {string s1("hello world");cout << s1.capacity() << endl;  //15s1.reserve(100);cout << s1.capacity() << endl; //111
}

  6.将字符串容量缩小到是能容纳size()的最小容量。

void Test() {string s1("hello world");//大于容量会扩容,小了容量不会变s1.reserve(100); //保留、预留cout << s1.capacity() << endl;//将容量缩到能容纳size()的最小容量s1.shrink_to_fit();cout << s1.size() << endl;cout << s1.capacity() << endl;
}

  7.将有效字符得个数改成n个,多出得空间用字符填充。

void Test() {string s1("hello world");cout << s1.size() << endl;  //11s1.resize(2);cout << s1.size() << endl; //2cout << s1 << endl; //he
}

string类对象的访问及遍历操作

  1.从遍历认识迭代器。

void Test13() {string s1("hello world");for (int i = 0; i < s1.size(); ++i) {cout << s1[i];}cout << endl;string::iterator it = s1.begin();for (it; it != s1.end(); it++) {cout << *it;}cout << endl;
}

  begin()指向字符串首位,如图所示。end()指向 \0 的位置。
在这里插入图片描述
  2.反向迭代器。

void Test13() {string s1("hello world");for (int i = s1.size() - 1; i >= 0; --i) {cout << s1[i];}cout << endl;string::reverse_iterator rit = s1.rbegin();for (rit; rit != s1.rend(); rit++) {cout << *rit;}cout << endl;
}

  rbegin()指向字符串最后一位,rend()指向字符串第一位的前一位。
在这里插入图片描述

string类对象的修改操作

push_back()
  1.在字符串后尾插字符c。

void Test() {string s1("hello world");s1.push_back('c');//运行结果 hello worldccout << s1 << endl;
}

append()
   2.在字符串后追加一个字符串。

void Test() {string s1("hello world");s1.append("123456");//运行结果 hello world123456cout << s1 << endl;
}

operator+()
   3.在字符串后追加字符串str。

void Test() {string s1("hello world");string str("123456");s1 += str;//运行结果 hello world123456cout << s1 << endl;
}

c_str()
  4.返回c格式字符串。

void Test13() {string s1("hello world");//运行结果 hello worldcout << s1.c_str() << endl;
}

find()
  5.从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置。
  pos的类型不能为size_t类型,当查找不到字符的时候,会返回-1,而size_t类型中全是正数。

void Test() {string s1("hello world");//从下标0处开始查找字符空格int pos = s1.find(' ', 0);//运行结果 5cout << pos << endl;
}

rfind()
  6.从字符串pos位置开始往前查找字符c,返回该字符在字符串中的位置。

void Test() {string s1("hello world");//从下标10处开始查找字符空格int pos = s1.rfind(' ', 10);//运行结果 5cout << pos << endl;
}

substr()
  7.在字符串中从pos位置开始,截取n个字符,然后将其返回。

void Test() {string s1 = "hello world";string str = s1.substr(3,5);  //pos len//运行结果 lo wocout << str << endl;
}

string类输入

getline()
  当输入得字符串中含有空格时,我们得输入只会截取空格前的字符串,不会截取空格后的字符串,这与我们的预期不符。
  使用getline()输入,遇到 \0 才会停止输入。

void Test() {string s1,s2;//输入 eqw rw rwertgetline(cin,s2);//输入 eqw rw rwertcin >> s1;//运行结果 eqwcout << s1 << endl;//运行结果 eqw rw rwertcout << s2 << endl;
}

  getline() 遇到自定义字符停止。
遇到字符*停止输入。

void Test13() {string s1;//输入 eqw rw ew*l rwertgetline(cin,s1,'*');//输出结果 eqw rw ewcout << s1 << endl;
}

在这里插入图片描述

觉得我回答有用的话,记得点个关注哟!谢谢支持!

http://www.dtcms.com/a/426893.html

相关文章:

  • 修改网站模板详解如何开网站需要多少钱
  • 浅谈WebSocket
  • 做网站背景wordpress登录样式
  • 自动化通信谜团:耐达讯自动化Modbus RTU如何变身 Profibus连接触摸屏
  • 调节阀控制的“语言障碍“:耐达讯自动化一招破解,让Modbus RTU变身Profibus!
  • LE AUDIO之助听器Hearing Access Profile
  • 提升学习自主性:听写自动化对儿童习惯养成的技术支持
  • MySql的存储过程以及JDBC实战
  • 中国电建地产北京山谷:以“三好”战略绘就文旅康养与乡村振兴融合新图景
  • 中国网站建设中心做旅游网站公司
  • 【PyCharm】远程本地的WSL2如何配置copilot的Tab不冲突
  • 49.多路转接epoll
  • flash网站源码下载北京网站建设案例
  • 景德镇做网站代理游戏平台赚钱吗
  • 开源AI大模型、AI智能名片与S2B2C商城小程序:用户需求满足的底层逻辑与实践路径
  • Git 命令配置别名、Git命令缩写(Mac版)
  • 部署Tomcat11.0.11(Kylinv10sp3、Ubuntu2204、Rocky9.3)
  • SCL-90症状自评量表抖音快手微信小程序看广告流量主开源
  • 合肥网站公司微信商城开发需要多少钱
  • 企业在拥抱 Al技术过程中面临安全风险是什么
  • Claude Sonnet 4.5:一次面向落地的常规升级(性能、安全、开发者工具)
  • Linux内核命名空间隔离机制在容器安全强化中的实战应用标准
  • 灵雀云六度入选 Gartner 中国 ICT 技术成熟度曲线报告,ACP以安全、稳定、智能三大核心能力定义企业级云原生数字底座
  • 中文的网站做不成二维码记事本做网站怎么改字体颜色
  • 近场通讯(NFC)在工厂智能化中的应用:从工具管理到身份识别
  • 计算机网络-RIP协议
  • Cortex-M3深入理解
  • python进阶_Day2
  • Python14-SVM⽀持向量机
  • 无锡做网站价格手机网站排名怎么做