欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > string常见的接口使用(3)

string常见的接口使用(3)

2025/4/3 15:04:12 来源:https://blog.csdn.net/2403_88076707/article/details/146442423  浏览:    关键词:string常见的接口使用(3)

本章目标

1.Element access类的接口
2.Modifiers类的接口
3.String operations类的接口

1.Element access类的接口

1.1string::operator[]

在这里插入图片描述

在string中,[]被重载了.因为string的底层是一个动态开辟字符数组.
支持随机访问,遍历这些操作,同时它重载了两个函数,同时支持读写和修改的操作.
对于它的越界访问会以assert断言的方式返回
演示代码

string s5 = "dddddddddddddd";
for (int i = 0; i < s5.size(); i++)
{cout << s5[i] << " ";
}
cout << endl;

1.2string::at

在这里插入图片描述
它的效果与重载的[]一致.但是有所不同的是它的错误返回,它会以抛异常的方式返回.如果外层对这个异常进行捕获.那么程序仍然可以正常进行.
演示代码

for (int i = 0; i < s5.size(); i++)
{cout << s5.at(i) << " ";
}
cout << s5.front() << endl;
cout << s5.back() << endl;cout << endl;

1.3back与front

back会返回最后一个这个string的字符,front会返回第一个字符
在这里插入图片描述

	cout << s5.front() << endl;cout << s5.back() << endl;

2.Modifiers类的接口

2.1operator+

在这里插入图片描述
operator+=这个重载会在这个string后面追加一个字符串,字符或者另一个string
演示代码

	string s6 = "ddddddddd";cout << s6 << endl;s6 += "xxxxxxxx";cout << s6 << endl;s6 += 'a';cout << s6 << endl;string s7 = "wwwwwwwww";cout << s6 << endl;s6 += s7;cout << s6 << endl;s6.append("hhhhhhhh");cout << s6 << endl;

2.2.append

在这里插入图片描述
append的主要功能是追加字符串.
它重载了多个版本.
分别是1.追加一个string
2.从另一个字符串的第pos个位置追加npos个字符,到当前字符,如果不给值会用npos的缺省值.
也就意味着全追加到当前字符.
3.追加一个字符串
4,追加一个字符串的前n个
5.追加n个该字符
6.追加一个迭代区间
演示代码

string s6 = "ddddddddd";
cout << s6 << endl;
string s7("ssssssss");cout << s6 << endl;
s6.insert(s6.begin(), s7.begin(), s7.end());
cout<<s6<<endl;std::string str;std::string str2 = "Writing ";std::string str3 = "print 10 and then 5 more";// used in the same order as described above:str.append(str2);                       // "Writing "str.append(str3, 6, 3);                   // "10 "str.append("dots are cool", 5);          // "dots "str.append("here: ");                   // "here: "str.append(10u, '.');                    // ".........."str.append(str3.begin() + 8, str3.end());  // " and then 5 more"str.append(5, 0x2E);                // "....."std::cout << str << '\n';

2.3push_back

在这里插入图片描述
容器的通用命名,尾插,该方法跟顺序表尾插一样,会在这个string后面追加一个字符

string s1;
size_t old = s1.capacity();
cout << s1.capacity() << endl;
for (int i = 0; i < 100; i++)
{s1.push_back('x');if (old != s1.capacity()){cout << s1.capacity() << endl;old = s1.capacity();}
}
s1.clear();
cout << s1.size() << endl;
cout << s1.capacity() << endl;
cout << s1 << endl;

2.4insert

在这里插入图片描述
插入一个字符或者字符串或者一段迭代区间
在string这个容器中并没有提供头插.但是我们可以通过insert这个接口间接实现
它仍然提供了多个版本
我们下面提供几种最常用的方法的代码演示

string s6 = "ddddddddd";
cout << s6 << endl;
string s7("ssssssss");cout << s6 << endl;
s6.insert(s6.begin(), s7.begin(), s7.end());cout << s6 << endl;
s6.insert(3, "aaaaaaaaaa");cout << s6 << endl;
s6.insert(0, 1, '%');cout << s6 << endl;
s6.insert(s6.begin(), 'a');cout << s6 << endl;

分别是追加一个迭代区间,
从第pos个位置插入一个字符串,
头插,
从该迭代器位置插入一个字符.

2.5 erase

在这里插入图片描述

erase是从指定位置删除该string的字符,但是该删除与resize一样,不会影响容量大小.
它提供了三个版本
第一个是从某个位置删除len个字符,如果不去传参,它就删完后面所有的
第二个删除该迭代器位置的字符
第三个是删除一块迭代区间

tring s6 = "ddddddddd";cout << s6 << endl;s6 += "xxxxxxxx";cout << s6 << endl;s6 += 'a';cout << s6 << endl;string s7 = "wwwwwwwww";cout << s6 << endl;s6 += s7;cout << s6 << endl;s6.append("hhhhhhhh");cout << s6 << endl;s6.append(s7.begin(), s7.end());cout << s6 << endl;cout << s6.size() << endl << s6.capacity() << endl;//s6.resize(10);s6.reserve(10);cout << s6.size() << endl << s6.capacity() << endl;cout << s6 << endl;s6.erase(20);cout << s6 << endl;cout << s6.size() << endl << s6.capacity() << endl;s6.erase(s6.begin());cout << s6 << endl;s6.erase(s6.begin() + 3, s6.begin() + 6);cout << s6 << endl;

2.6replace

在这里插入图片描述
replace的主要作用是替代用该字符,或者字符串替代
我们在这里简单介绍一个

	string str = "hello world";str.replace(5, 1, "%%%");cout << str << endl;

它会从第五个位置的空格起的一个字符,用这个字符串替代

2.7pop_back

尾删,删除一个字符,这是容器的通用写法
在这里插入图片描述

3.String operations类的接口

3.1c_str

在这里插入图片描述
c_str会返回当前string底层的那个字符串.它主要是应用于一些我们c语言的一些接口
例如文件的打开这样的函数

string s7 = "Դ.cpp";
FILE* fp = fopen(s7.c_str(), "r");
char  ch = fgetc(fp);
while (ch != EOF)
{cout << ch;ch = fgetc(fp);
}

fopen第一个要求的是const类型的字符串,而c_str这个接口会提供这个字符串
3.2find与rend
在这里插入图片描述
它会找这个字符串或者字符从第pos个位置,如果该位置不给传参的话会从头开始找.
rend就是从后往前找
测试代码

string ret;
string s1 = "test.cpp";
size_t find = s1.find('.');
if (find != string::npos)
{ret = s1.substr(find);cout << ret << endl;
}
string s2 = "Test.cpp.tar.zip";
size_t find1 = s2.rfind('.');
if (find1 != string::npos)
{ret = s2.substr(find1);cout << ret << endl;
}

3.2substr

在这里插入图片描述
substr是截取字符串,从第pos个位置开始截取len个字符
如果pos不给值会用缺省值,从头开始找,如果len不给值会直接截取pos后面的所有字符串

string  s3 = "https://gitee.com/bithange/issue-116/blob/master/25%E5%B9%B4-03%E6%9C%88-19%E6%97%A5--string/Test.cpp";
size_t pos = s3.find(':');
if (pos != string::npos)
{ret = s3.substr(0, pos);cout << ret << endl;
}
size_t pos1 = s3.find('/', pos + 3);
if (pos1 != string::npos)
{ret = s3.substr(pos + 3, pos1 - pos - 3);cout << ret << endl;
}
ret = s3.substr(pos1);
cout << ret << endl;

测试代码,以上是用一个url来进行划分成协议,域名,资源三部分.
网站时我的gitee可以关注下哈

3.3find_Frist_of

在这里插入图片描述
这个接口会屏蔽用*string中它给的那个串的字符,其他的几个类似于frist_not_of,时屏蔽除那个字符串的字符中其他的元素

#include <iostream>       // std::cout
#include <string>         // std::string
#include <cstddef>        // std::size_tint main ()
{std::string str ("Please, replace the vowels in this sentence by asterisks.");std::size_t found = str.find_first_of("aeiou");while (found!=std::string::npos){str[found]='*';found=str.find_first_of("aeiou",found+1);}std::cout << str << '\n';return 0;
}

在这里插入图片描述

std::string str("Please, replace the vowels in this sentence by asterisks.");
std::size_t found = str.find_first_not_of("aeiou");
while (found != std::string::npos)
{str[found] = '*';found = str.find_first_not_of("aeiou", found + 1);
}std::cout << str << '\n';

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词