<string>头文件常用成员函数
之前说过 string和vector一样,也是一种顺序容器,并且它也自带成员函数,用法和vector的成员函数差不多,不过它只能用来存放字符,也就是字符串。
在c++中,<string>基本上已经包含在<iostream>里面了,但即便如此,在我们用到string类的时候还是要加上头文件<string>的。
下面介绍一下string对象常用的成员函数。
1.构造函数,有三个常用的
(1) string str1="hello world";
(2) string str2("abcde");
(3) string *str3=new string("12343543");
2. 获取字符串长度
int len1=str1.length(); //获取字符串长度
int len2=str1.size(); //获取string这个容器对象中元素的个数
3. 用 '+' 串联字符串
在<string>头文件里对 '+' 进行了重载,可以用来串联字符串
string str4=str1+str2+str3;
4. [ ] 随机访问
在<string>头文件里对 [ ] 进行了重载,可以用来对字符串对象进行随机访问str1[3],包括存取甚至修改操作,类似于数组。
5. 常用的成员函数
push_back();向string容器的末尾位置添加字符
push_pop(); 把string容器里的末尾元素弹出容器,即删除操作
begin();返回一个指向容器中第一个元素的迭代器
end();返回一个指向容器中最后一个元素的下一个位置的迭代器
rebegin();反向迭代,返回指向最后一个元素的下一个位置的迭代器
rend(); 反向迭代,返回指向第一个元素的的迭代器
front();返回容器中第一个元素的引用,可以对其进行存取及修改操作
back();返回容器中最后一个元素的引用,可以对其进行存取及修改操作
at();此成员函数有参数,参数是下标。的作用类似于[ ]操作符,用来对指定下标位置的元素进行随机访问,可进行存取及修改操作
resize(int n, char c);调整容器有效数据尺寸,若尺寸变大,则自动截掉多余的数据;若尺寸变大,则空出的用该函数的第二个参数填充,会影响容器的size。
reserve();为容器预留足够的空间,避免了不必要的重复分配,分配空间大于等于函数的参数,会影响capacity
find(str, int start);<string>文件对find()进行了重载。在只有一个参数的时候表示在当前字符串里查找某个字符或某个子串,查找成功返回首次出现的位置,查找不成功返回-1。
在有第二个参数的时候且该参数是int型,即指定了查找的起始位置start,表示从该位置start开始查找。
copy();用于拷贝。原型为:int copy(char* buffer, int n, int start ) const;把当前字符串中以start位置开始的n个字符复制到到以buffer为起始位置的字符数组中,返回实际拷贝的数目
str1.swap(str2);交换字符串str1和str2
clear();清空当前string容器
empty();判断容器是否为空,为空返回1,非空返回0
c_str();返回一个以NULL结束的c语言字符串。原型为:const char* c_str()const;
erase();删除字符串中的字符,它既可以通过下标也可以通过迭代器来删除指定位置处的字符,甚至可以删除某个区间内的所有字符。由于erase()有多种重载,所以给出了具体用法,看下面代码
#include<iostream>
#include<string>
using namespace std; int main()
{
string str1(""),str2("");
str1.erase(,); //第一个参数为起始删除位置,第二个参数为删除的元素个数。即从下标为6的位置开始删除,删除1个元素
cout<<str1<<"\n";
str1.erase(,); //第一个参数为起始删除位置,第二个参数为删除的元素个数。即从下标为6的位置开始删除,删除2个元素
cout<<str1<<"\n";
str1.erase(); //从下标为1的位置开始删除,删除下标为1及1之后的所有元素
cout<<str1<<"\n"; string::iterator iter1,iter2;
iter2=str2.end()-;
str2.erase(iter2); //删除迭代器所指位置的元素
cout<<str2<<"\n";
iter1=str2.begin();
iter2=str2.begin()+;
str2.erase(iter1,iter2); //删除两个迭代器所指元素之间的所有元素
cout<<str2<<"\n";
return ;
}
结果如下:

insert();向当前字符串中指定位置处插入另外一个字符串,insert()有多种重载,具体用法看代码
#include<iostream>
#include<string>
using namespace std; int main()
{
string str1(""),str2("abcde"); str1.insert(,str2); //把str2插入到str1中下标为8的位置,第一个参数8是插入位置
cout<<str1<<"\n";
str1.insert(,"hello world"); //把指定字符串插入到str1中下标为4的位置
cout<<str1<<"\n\n"; str1.insert(,"nihao",); //在str1中下标为3的位置插入字符串的前4个字符
cout<<str1<<"\n\n"; str1.insert(,str2,,); //把str2中下标从0开始的前3个字符插入到str1中
cout<<str1<<"\n\n"; string::iterator iter1,iter2,iter3;
iter1=str2.begin();
str2.insert(iter1,''); //在iter1所指的位置插入字符'6'
cout<<str2<<"\n";
iter1=str2.end()-;
str2.insert(iter1,,''); //在iter1所指的位置插入3个字符'8'
cout<<str2<<"\n\n"; string str3("xyz");
iter1=str2.end()-;
iter2=str3.begin();
iter3=str3.end()-;
str2.insert(iter1,iter2,iter3); //把iter2和iter3所指位置之间的所有字符都插入到str2中iter1所指的位置
cout<<str2<<"\n";
return ;
}
结果如下:

<string>头文件常用成员函数的更多相关文章
- string常用成员函数
string常用成员函数 std::string::clear Clear string Erases the contents of the string, which becomes an emp ...
- [C++ Primer Plus] 零散知识点(一)、输入函数(cin,cin.get,cin.getline等)+string头文件辨析
本文几乎照搬http://www.cnblogs.com/luolizhi/p/5746775.html博客,只修改了一点点.不知道怎么转发过来,尴尬... 学C++的时候,这几个输入函数弄的有点迷糊 ...
- QString:常用成员函数总结
QString是Qt中使用频率最高的几种数据类型之一,主要在于其提供了大量功能强大的成员函数,这里重点介绍一些常用的成员函数: 一.字符串处理相关 1.1 split() (拆分字符串) split( ...
- 在c++中引用c头文件里的函数
在c++中有的时候想要引用c头文件里的函数有两种方法;就拿c语言里面的<stdlib.h>举例 在c中我们想要用<stdlib.h>里的函数,形式为:#include<s ...
- 头文件与main函数
头文件 1.为什么要使用头文件? 程序如戏 程序中有很多元素(std::cout, system), 都是一个个演员 但是他们之间都互不认识, 但是却要一起合作, 强行编译, 就会导致错误! 得预先介 ...
- C++ string头文件
转载自https://blog.csdn.net/superna666/article/details/52809007/ 作者 zhenzhenjiajia888 标准c++中string类函数介绍 ...
- C语言string.h中常用字符函数介绍
原文:http://www.cnblogs.com/xuwenmin888/archive/2013/05/03/3057883.html strcpy 函数名: strcpy 功 能: 拷贝一个字符 ...
- VS2010中如果忘记函数所在的头文件或者忘记函数的输入输出参数类型怎么办?
先随便找一个熟悉的函数,右击-转到定义,然后写出目标函数,右击-转到定义
- CString和string头文件
在使用了MFC库的工程中CString可以直接使用,在没有使用MFC库的工程中加入#include <atlstr.h> 要使用STL里的string,要加入#include <st ...
随机推荐
- jdbc连接方法
jdbc(Java Database Connectivity)的5个步骤: 一.加载驱动. 反射中的主动加载,Driver.class右键copy qualified Name 二.创建连接 dat ...
- MySQL默认隔离级别为什么是RR
曾多次听到“MySQL为什么选择RR为默认隔离级别”的问题,其实这是个历史遗留问题,当前以及解决,但是MySQL的各个版本沿用了原有习惯.历史版本中的问题是什么,本次就通过简单的测试来说明一下. 1. ...
- python学习第四节 迭代器 生成器
1:什么是迭代 可以直接作用于for循环的对象统称为可迭代对象(Iterable). 可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator). 所有的Iterable均可以通 ...
- php源码的编译
本片文章主要介绍windows下的php源码的编译. 1.1 编译环境 软件 环境 操作系统 Windows 7 专业版 32bit Visual studio 2012 专业版 PHP 5.5.2. ...
- A AK的距离
时间限制 : - MS 空间限制 : - KB 评测说明 : 1s,128m 问题描述 同学们总想AK.于是何老板给出一个由大写字母构成的字符串,他想你帮忙找出其中距离最远的一对'A'和'K'. ...
- SpringBoot整合Springfox-Swagger2
前言 不管Spring Boot整合还是SpringMVC整合Swagger都基本类似,重点就在于配置Swagger,它的精髓所在就在于配置. @ 目录 1.Swagger简介 2.整合前可能遇到的问 ...
- 让你第一次认识到Java的内存管理
发现之前写的可读性不好,这次准备试试换风格,去掉长篇大论,觉得这个风格好的,麻烦点个赞啦 清理.JVM的妙处 大家以后都是程序员,假设你很不幸,需要自己交钱租房子. 你作为一个小穷人,租的房子到期了( ...
- 自执行函数-[javascript]-[语法]
在看别人的代码的时候,遇到了一种写法,之前没有见过,如下: 数据结构[双向链表](5)
(js描述的)数据结构[双向链表](5) 一.单向链表的缺点 1.只能按顺序查找,即从上一个到下一个,不能反过来. 二.双向链表的优点 1.可以双向查找 三.双向链表的缺点 1.结构较单向链表复杂. ...