之前说过 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>头文件常用成员函数的更多相关文章

  1. string常用成员函数

    string常用成员函数 std::string::clear Clear string Erases the contents of the string, which becomes an emp ...

  2. [C++ Primer Plus] 零散知识点(一)、输入函数(cin,cin.get,cin.getline等)+string头文件辨析

    本文几乎照搬http://www.cnblogs.com/luolizhi/p/5746775.html博客,只修改了一点点.不知道怎么转发过来,尴尬... 学C++的时候,这几个输入函数弄的有点迷糊 ...

  3. QString:常用成员函数总结

    QString是Qt中使用频率最高的几种数据类型之一,主要在于其提供了大量功能强大的成员函数,这里重点介绍一些常用的成员函数: 一.字符串处理相关 1.1 split() (拆分字符串) split( ...

  4. 在c++中引用c头文件里的函数

    在c++中有的时候想要引用c头文件里的函数有两种方法;就拿c语言里面的<stdlib.h>举例 在c中我们想要用<stdlib.h>里的函数,形式为:#include<s ...

  5. 头文件与main函数

    头文件 1.为什么要使用头文件? 程序如戏 程序中有很多元素(std::cout, system), 都是一个个演员 但是他们之间都互不认识, 但是却要一起合作, 强行编译, 就会导致错误! 得预先介 ...

  6. C++ string头文件

    转载自https://blog.csdn.net/superna666/article/details/52809007/ 作者 zhenzhenjiajia888 标准c++中string类函数介绍 ...

  7. C语言string.h中常用字符函数介绍

    原文:http://www.cnblogs.com/xuwenmin888/archive/2013/05/03/3057883.html strcpy 函数名: strcpy 功 能: 拷贝一个字符 ...

  8. VS2010中如果忘记函数所在的头文件或者忘记函数的输入输出参数类型怎么办?

    先随便找一个熟悉的函数,右击-转到定义,然后写出目标函数,右击-转到定义

  9. CString和string头文件

    在使用了MFC库的工程中CString可以直接使用,在没有使用MFC库的工程中加入#include <atlstr.h> 要使用STL里的string,要加入#include <st ...

随机推荐

  1. ImportError: libpng12.so.0: cannot open shared object file: No such file or directory

    原因:动态链接库丢失或路径找不到 解决:执行下列命令即可 wget -q -O /tmp/libpng12.deb http://mirrors.kernel.org/ubuntu/pool/main ...

  2. Javascript/Jquery遇到字符串自动NaN的问题

    结果发现是一个id绑定了两次点击事件.修改之后,问题解决.

  3. Android ConstraintLayout 构建自适应界面

    原文链接 使用 ConstraintLayout 构建自适应界面 ConstraintLayout 可让您使用扁平视图层次结构(无嵌套视图组)创建复杂的大型布局.它与 RelativeLayout 相 ...

  4. sql.Rows 转换为 []map[string]interface{} 类型

    // *sql.Rows 转换为 []map[string]interface{}类型 func rows2maps(rows *sql.Rows) (res []map[string]interfa ...

  5. Xcode - 添加文档注释插件

    Xcode自动添加文档注释插件: https://github.com/onevcat/VVDocumenter-Xcode 功能演示: 感谢onevcat的分享!

  6. 201771010108-韩腊梅《面向对象程序设计(java)》第二周学习总结

    201771010108<面向对象程序设计(java)>第二周学习总结 第一部分:理论知识学习部分 第三章:Java的基本程序设计结构 1.标识符:① 标识符由字母.下划线.美元符号和数字 ...

  7. flume客户端模拟数据发送并记录在mysql数据库

    这里只是做了简单的demo,并未深研 1.编写PolluteSink 1.1 maven创建项目(pom.xml) <dependencies> <dependency> &l ...

  8. 【前端】HTML总结

    一. HTML介绍:---------------------------------------1. 什么是HTML?   超文本标记语言,  <标签名>--标记(标签.节点)   2. ...

  9. 【PHP】函数

    一.      数学中的函数: a)    sin().cos().tan().log() 这些都是数学函数,但是都已经忘了啥意思了!没关系,在php当中的函数和这些函数的概念还是有一定的区别的 二. ...

  10. 计算机网络协议,PPP协议分析

    一.基本特点 1.PPP协议是计算机网络体系中第二层(数据链路层)的协议 2.PPP帧格式是以HDLC帧格式为基础,做了很少的改动(区别:PPP是面向字符的,而HDLC是面向位的) 3.PPP协议使用 ...