这篇文章我们来接着看看string还有哪一些常用的方式:
目录
string& insert (size_t pos, size_t n, char c);
pos为指定位置,n为字符个数,c代表要插入的字符
简单演示一下:
iterator insert (iterator p, char c);
指向插入一个字符,不考虑字符个数,那么就可以使用参数为(迭代器,字符)的函数:
简单示例:
string& insert (size_t pos, const char* s);
简单演示:
iterator erase (iterator p);
简单演示:
string& erase (size_t pos = 0, size_t len = npos);
简单演示:
这其中len默认等于npos,npos是一个静态成员变量:
当没有给第二个参数len明确的值时,会从起始位置一直删除到字符串结束。
当给定的len值大于原本字符串的长度时,和len不赋值效果相同,一直删到字符串结束为止。
void swap (string& str);
交换的是两个对象的指针,指针指向的内容改变,交换效率高:
是内容的交换,但因为是自定义类型,会涉及到深拷贝问题,效率低,开销大:
相当于将string类型变成我们更加熟悉的char*类型:
简单演示:
- int main()
- {
- string s1("hello");
- cout << typeid(s1).name() << endl;
- cout << typeid(s1.c_str()).name() << endl;
- return 0;
- }
size_t find (char c, size_t pos = 0) const;
指定位置查找字符,返回匹配到的字符的下标位置,否则返回npos--整形最大值
size_t find (const char* s, size_t pos = 0) const;
指定起始位置查找与之匹配的子串,返回子串开头下标位置否则返回npos
从下标为6的位置开始找,匹配到字符串,返回字符串的下标位置
和find功能相同,只是找的起始方向不同,一个前一个后,还是很容易理解的
string substr (size_t pos = 0, size_t len = npos) const;
pos为起始位置,len为子串长度,返回这个子串
举例子:
没有找到会返回npos,可以当作判断条件来使用
- int main()
- {
- string s1("xxxxxxxxhelloaaaaa");
- size_t end = s1.rfind('o');
- size_t pos = s1.find("hello");
- if(s1.find("hello")!=string::npos)
- {
- cout << s1.substr(pos, end - pos+1) << endl;
- }
- return 0;
- }
不会受到空格的影响:
当我们用 cin 输入一行字符串时,若中间有空格,会停止获取空格后的字符串:
这时可以使用getline,用法:
istream& getline (istream& is, string& str);
string的常见用法到这里就结束了,其他用法感兴趣的伙伴可以查阅文档自主学习,推荐网站:
希望和大家一起进步!!!