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

C++中的String的常用函数用法

一. string的构造函数的形式:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

string str:生成空字符串

string s(str):生成字符串为str的复制品

string s(str, strbegin,strlen):将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值

string s(cstr, char_len):以C_string类型cstr的前char_len个字符串作为字符串s的初值

string s(num ,c):生成num个c字符的字符串

string s(str, stridx):将字符串str中从下标stridx开始到字符串结束的位置作为字符串初值

eg:

string str1;//生成空字符串

string str2("123456789");//生成"1234456789"的复制品

string str3("12345", 0, 3);//结果为"123"

string str4("012345", 5);//结果为"01234"

string str5(5,'1');//结果为"11111"

string str6(str2, 2);//结果为"3456789"

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#include <iostream>

#include <string>

usingnamespacestd;

voidtest1()

{

string str1;//生成空字符串

string str2("123456789");//生成"1234456789"的复制品

string str3("12345", 0, 3);//结果为"123"

string str4("0123456", 5);//结果为"01234"

string str5(5,'1');//结果为"11111"

string str6(str2, 2);//结果为"3456789"

cout<<"str2:"<<str2<<endl;

cout<<"str3:"<<str3<<endl;

cout<<"str4:"<<str4<<endl;

cout<<"str5:"<<str5<<endl;

cout<<"str6:"<<str6<<endl;

}

intmain()

{

test1();

return0;

}

二. string的大小和容量::

1

2

3

4

5

1. size()和length():返回string对象的字符个数,他们执行效果相同。

2. max_size():返回string对象最多包含的字符数,超出会抛出length_error异常

3. capacity():重新分配内存之前,string对象能包含的最大字符数

1

2

3

4

5

6

7

8

9

voidtest2()

{

string s("1234567");

cout <<"size="<< s.size() << endl;

cout <<"length="<< s.length() << endl;

cout <<"max_size="<< s.max_size() << endl;

cout <<"capacity="<< s.capacity() << endl;

}

三. string的字符串比较:

1. C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如 str<”hello”)。 在使用>,>=,<,<=这些操作符的时候是根据“当前字符特性”将字符按字典顺序进行逐一得 比较。字典排序靠前的字符小, 比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小(前面减后面) 同时,string (“aaaa”) <string(aaaaa)。 2. 另一个功能强大的比较函数是成员函数compare()。他支持多参数处理,支持用索引值和长度定位子串来进行比较。 他返回一个整数来表示比较结果,返回值意义如下:0:相等 1:大于 -1:小于 (A的ASCII码是65,a的ASCII码是97)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

voidtest3()

{

// (A的ASCII码是65,a的ASCII码是97)

// 前面减去后面的ASCII码,>0返回1,<0返回-1,相同返回0

string A("aBcd");

string B("Abcd");

string C("123456");

string D("123dfg");

// "aBcd" 和 "Abcd"比较------ a > A

cout <<"A.compare(B):"<< A.compare(B)<< endl;// 结果:1

// "cd" 和 "Abcd"比较------- c > A

cout <<"A.compare(2, 3, B):"<<A.compare(2, 3, B)<< endl;// 结果:1

// "cd" 和 "cd"比较

cout <<"A.compare(2, 3, B, 2, 3):"<< A.compare(2, 3, B, 2, 3) << endl;// 结果:0

// 由结果看出来:0表示下标,3表示长度

// "123" 和 "123"比较

cout <<"C.compare(0, 3, D, 0, 3)"<<C.compare(0, 3, D, 0, 3) << endl;// 结果:0

}

四. string的插入:push_back() 和 insert()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

voidtest4()

{

string s1;

// 尾插一个字符

s1.push_back('a');

s1.push_back('b');

s1.push_back('c');

cout<<"s1:"<<s1<<endl;// s1:abc

// insert(pos,char):在制定的位置pos前插入字符char

s1.insert(s1.begin(),'1');

cout<<"s1:"<<s1<<endl;// s1:1abc

}

五、string拼接字符串:append() & + 操作符

1

2

3

4

5

6

7

8

9

10

11

12

13

14

voidtest5()

{

// 方法一:append()

string s1("abc");

s1.append("def");

cout<<"s1:"<<s1<<endl;// s1:abcdef

// 方法二:+ 操作符

string s2 ="abc";

/*s2 += "def";*/

string s3 ="def";

s2 += s3.c_str();

cout<<"s2:"<<s2<<endl;// s2:abcdef

}

六、 string的遍历:借助迭代器 或者 下标法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

voidtest6()

{

string s1("abcdef");// 调用一次构造函数

// 方法一: 下标法

for(inti = 0; i < s1.size() ; i++ )

{

cout<<s1[i];

}

cout<<endl;

// 方法二:正向迭代器

string::iterator iter = s1.begin();

for( ; iter < s1.end() ; iter++)

{

cout<<*iter;

}

cout<<endl;

// 方法三:反向迭代器

string::reverse_iterator riter = s1.rbegin();

for( ; riter < s1.rend() ; riter++)

{

cout<<*riter;

}

cout<<endl;

}

七、 string的删除:erase()

1. iterator erase(iterator p);//删除字符串中p所指的字符 2. iterator erase(iterator first, iterator last);//删除字符串中迭代器 区间[first,last)上所有字符 3. string& erase(size_t pos = 0, size_t len = npos);//删除字符串中从索引 位置pos开始的len个字符 4. void clear();//删除字符串中所有字符

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

voidtest6()

{

string s1 ="123456789";

// s1.erase(s1.begin()+1); // 结果:13456789

// s1.erase(s1.begin()+1,s1.end()-2); // 结果:189

s1.erase(1,6);// 结果:189

string::iterator iter = s1.begin();

while( iter != s1.end() )

{

cout<<*iter;

*iter++;

}

cout<<endl;

}

八、 string的字符替换:

1. string& replace(size_t pos, size_t n, const char *s);//将当前字符串 从pos索引开始的n个字符,替换成字符串s 2. string& replace(size_t pos, size_t n, size_t n1, char c); //将当前字符串从pos索引开始的n个字符,替换成n1个字符c 3. string& replace(iterator i1, iterator i2, const char* s);//将当前字符串[i1,i2)区间中的字符串替换为字符串s

1

2

3

4

5

6

7

8

9

10

11

12

13

voidtest7()

{

string s1("hello,world!");

cout<<s1.size()<<endl;// 结果:12

s1.replace(s1.size()-1,1,1,'.');// 结果:hello,world.

// 这里的6表示下标 5表示长度

s1.replace(6,5,"girl");// 结果:hello,girl.

// s1.begin(),s1.begin()+5 是左闭右开区间

s1.replace(s1.begin(),s1.begin()+5,"boy");// 结果:boy,girl.

cout<<s1<<endl;

}

九、 string的大小写转换:tolower()和toupper()函数 或者 STL中的transform算法

方法一:使用C语言之前的方法,使用函数,进行转换

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#include <iostream>

#include <string>

usingnamespacestd;

intmain()

{

string s ="ABCDEFG";

for(inti = 0; i < s.size(); i++ )

{

s[i] =tolower(s[i]);

}

cout<<s<<endl;

return0;

}

方法二:通过STL的transform算法配合的toupper和tolower来实现该功能

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#include <iostream>

#include <algorithm>

#include <string>

usingnamespacestd;

intmain()

{

string s ="ABCDEFG";

string result;

transform(s.begin(),s.end(),s.begin(),::tolower);

cout<<s<<endl;

return0;

}

十、 string的查找:find

1. size_t find (constchar* s, size_t pos = 0) const; //在当前字符串的pos索引位置开始,查找子串s,返回找到的位置索引, -1表示查找不到子串 2. size_t find (charc, size_t pos = 0) const; //在当前字符串的pos索引位置开始,查找字符c,返回找到的位置索引, -1表示查找不到字符 3. size_t rfind (constchar* s, size_t pos = npos) const; //在当前字符串的pos索引位置开始,反向查找子串s,返回找到的位置索引, -1表示查找不到子串 4. size_t rfind (charc, size_t pos = npos) const; //在当前字符串的pos索引位置开始,反向查找字符c,返回找到的位置索引,-1表示查找不到字符 5. size_tfind_first_of (const char* s, size_t pos = 0) const; //在当前字符串的pos索引位置开始,查找子串s的字符,返回找到的位置索引,-1表示查找不到字符 6. size_tfind_first_not_of (const char* s, size_t pos = 0) const; //在当前字符串的pos索引位置开始,查找第一个不位于子串s的字符,返回找到的位置索引,-1表示查找不到字符 7. size_t find_last_of(const char* s, size_t pos = npos) const; //在当前字符串的pos索引位置开始,查找最后一个位于子串s的字符,返回找到的位置索引,-1表示查找不到字符 8. size_tfind_last_not_of (const char* s, size_t pos = npos) const; //在当前字符串的pos索引位置开始,查找最后一个不位于子串s的字符,返回找到的位置索引,-1表示查找不到子串

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

voidtest8()

{

string s("dog bird chicken bird cat");

//字符串查找-----找到后返回首字母在字符串中的下标

// 1. 查找一个字符串

cout << s.find("chicken") << endl;// 结果是:9

// 2. 从下标为6开始找字符'i',返回找到的第一个i的下标

cout << s.find('i',6) << endl;// 结果是:11

// 3. 从字符串的末尾开始查找字符串,返回的还是首字母在字符串中的下标

cout << s.rfind("chicken") << endl;// 结果是:9

// 4. 从字符串的末尾开始查找字符

cout << s.rfind('i') << endl;// 结果是:18-------因为是从末尾开始查找,所以返回第一次找到的字符

// 5. 在该字符串中查找第一个属于字符串s的字符

cout << s.find_first_of("13br98") << endl;// 结果是:4---b

// 6. 在该字符串中查找第一个不属于字符串s的字符------先匹配dog,然后bird匹配不到,所以打印4

cout << s.find_first_not_of("hello dog 2006") << endl;// 结果是:4

cout << s.find_first_not_of("dog bird 2006") << endl;// 结果是:9

// 7. 在该字符串最后中查找第一个属于字符串s的字符

cout << s.find_last_of("13r98") << endl;// 结果是:19

// 8. 在该字符串最后中查找第一个不属于字符串s的字符------先匹配t--a---c,然后空格匹配不到,所以打印21

cout << s.find_last_not_of("teac") << endl;// 结果是:21

}

十一、 string的排序:sort(s.begin(),s.end())

1

2

3

4

5

6

7

8

9

10

11

#include <iostream>

#include <algorithm>

#include <string>

usingnamespacestd;

voidtest9()

{

string s ="cdefba";

sort(s.begin(),s.end());

cout<<"s:"<<s<<endl;// 结果:abcdef

}

十二、 string的分割/截取字符串:strtok() & substr()

strtok():分割字符串

1

2

3

4

5

6

7

8

9

10

11

12

voidtest10()

{

charstr[] ="I,am,a,student; hello world!";

constchar*split =",; !";

char*p2 =strtok(str,split);

while( p2 != NULL )

{

cout<<p2<<endl;

p2 =strtok(NULL,split);

}

}

1

2

3

4

5

6

voidtest11()

{

string s1("0123456789");

string s2 = s1.substr(2,5);// 结果:23456-----参数5表示:截取的字符串的长度

cout<<s2<<endl;

}

到此这篇关于C++中的String的常用函数用法的文章就介绍到这了

http://www.jsqmd.com/news/1125690/

相关文章:

  • 【算法从零到千】【32-41】位运算(详细讲解+题目运用)
  • Allegro 生产文件导出:Gerber 274X 与钻孔文件 5 步标准化检查清单
  • 羽球联盟 HarmonyOS NEXT 实战系列 (03/20):四Tab首页容器与资讯首屏搭建
  • Agentic AI:换个角度,从问题拆解到交付验证
  • 史上最简单!sirpdboy固件一键搞定软路由刷机、调试、扩容,彻底告别麻烦!
  • 多模态大模型架构的收敛与分化:从Transformer到模态定制
  • 全局光照/阴影的几个常见问题
  • Linux指令实战学习之内存泄漏
  • 堪萨斯大学新研究:揭示读唇出错原因,有望提升读唇训练与AI转录能力
  • 小模型回到电脑本地,数据安全就自动解决了吗?
  • 1D-CNN 轴承故障诊断实战:CWRU 数据集 6 类识别准确率达 99.2%
  • 小米寥寥几家车企设计汽车顶棚
  • 数智驱动 全域增长:劲捷KINGJOY的跨界突围与全域增长之路
  • 一颗Codec芯片的生存法则:为什么AI语音产品需要TP9311?
  • Agent 需要拦截模型调用?用 Middleware 给它加个“拦截器“!
  • 图像哈希算法(aHash/dHash/pHash)Python实战:3种方法对比与汉明距离阈值调优指南
  • 2026真太阳时八字排盘工具怎么选:看出生地校正、时区口径和隐私边界
  • HLS Downloader:浏览器里直接抓取和下载直播流
  • QT 5升级到 Qt 6 使用 Clazy 检查将 C++ 应用程序移植到 Qt 6
  • 生命涌现的小龙虾技能之【Cat Face Recognition Skill | 猫脸识别技能】简介
  • 每个按键都能单独屏蔽!这款免费小工具,治好了我的误触强迫症
  • 客户拜访录制了需求沟通短视频,2026教你搞定短视频文字提取难题
  • 速卖通商品信息自动翻译实现方案
  • 基于YOLO与边缘计算的垃圾自动分类系统:从数据到部署全流程实践
  • 新人接手老仓库最怕没人带:用 Codex / Claude Code 先画一张代码地图
  • 2026智能门锁避坑白皮书:从“参数内卷”到“6条标准”,不花冤枉钱的选购清单
  • 终极免费音频编辑解决方案:Audacity 完整指南
  • 每日热门skill:你的OpenClaw还在“闭着眼“搜索?Desearch这套去中心化引擎,让AI搜索质量飙到92.6%
  • 终极GitHub下载加速指南:3分钟解决国内访问缓慢问题
  • 虚拟化技术深度解析:从底层原理到产业实践,读懂云计算的核心基石