之前说过 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. Mysql数据库的基本操作(1)

    一.启动数据库 1. 我的电脑(此电脑)--->右键点击[管理]--->[服务和应用程序]--->[服务] 找到MySQL8.0可以选择手动启动或者自动启动. 2.可以直接通过命令行 ...

  2. java应用诊断和在线debug利器bistoury介绍与在K8S环境使用

    Bistoury介绍 Bistoury 是去哪儿网开源的一个对应用透明,无侵入的java应用诊断工具,用于提升开发人员的诊断效率和能力,可以让开发人员无需登录机器或修改系统,就可以从日志.内存.线程. ...

  3. 监控一哥Prometheus你可认识?

    先大致认识认识普罗米修斯 —— Prometheus. 依据官方文档https://prometheus.io/docs/introduction/overview/ 大概能够了解到 Promethe ...

  4. Docker常用yml

    GitLib version: '3.1' services: web: image: 'twang2218/gitlab-ce-zh:11.0.5' restart: always hostname ...

  5. IIS 组成

    HTTP.sys      http.sys 侦听来自网络的 HTTP 请求,将它们传递到 IIS 并返回响应. 它是一种可以从命令行停止和启动的服务.      "NET STOP HTT ...

  6. pinpoint配置使用

    一.下载pinpoint包 从https://github.com/naver/pinpoint/releases 下载 pinpoint-agent.tar.gz pinpoint-collecto ...

  7. HDU1074:Doing Homework(状压DP)

    Doing Homework Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  8. Blocked Billboard II题解--模拟到崩溃的模拟

    前言 比赛真的状态不好(腐了一小会),导致差点爆0. 这个题解真的是在非常非常专注下写出来的,要不然真的心态崩. 题目 题目描述 奶牛Bassie想要覆盖一大块广告牌,她在之前已经覆盖了一小部分广告牌 ...

  9. javascript入门 之 ztree (十 checkbox选中事件)

    <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - beforeCheck / onCheck< ...

  10. 22.1 Extends 继承的 方法重写、@Override的使用、

    /* * 继承中成员方法的特点 * 子类中没有这个方法,调用父类的 * 子类中重写了这个方法,调用子类的 * 方法的重写:在子父类当中,子类的方法和父类的完全一样,子类重写了父类的方法(覆盖),当子类 ...