之前说过 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数据库主键,外键,索引概述

    主键: 主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从学生表中搜索一条纪录如查找一个人,就只能根据学号去查找,这才能找出唯一的一个,这就是主键;如:id ...

  2. BZOJ 4472 salesman 题解

    题目 某售货员小T要到若干城镇去推销商品,由于该地区是交通不便的山区,任意两个城镇之间都只有唯一的可能经过其它城镇的路线.小T可以准确地估计出在每个城镇停留的净收益.这些净收益可能是负数,即推销商品的 ...

  3. Java刷题知识点总结

    1,方法的重写(override)两同两小一大原则: 方法名相同,参数类型相同 子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限. ...

  4. SpringAOP入门

    Spring的AOP aop概述 Aspect Oriented Programing 面向切面(方面)编程, aop:扩展功能不修改源代码实现 aop采取横向抽取机制,取代了传统纵向继承体系重复性代 ...

  5. Netty:Channel

    上一篇我们通过一个简单的Netty代码了解到了Netty中的核心组件,这一篇我们将围绕核心组件中的Channel来展开学习. Channel的简介 Channel代表着与网络套接字或者能够进行IO操作 ...

  6. python--装饰器、生成器、迭代器、元类

    一.装饰器 def w1(func): def inner(): func() return inner @w1 def f1(): ') 1.只要python解释器执行到装饰器,就会自动进行装饰,而 ...

  7. MTK Android Driver :Battery电池曲线

    MTK Android Driver :battery电池曲线 1.配置文件位置: CUSTOM_KERNEL_BATTERY= battery mediatek\custom\\kernel\bat ...

  8. Python常见数据结构-Tuple元组

    Python Tuple基本特点 元组与列表类似,不同之处在于元组的元素不能修改. 与字符串和列表一样,可以根据下标进行切片索引. 元组使用小括号,单一元素的元组定义是必须加一个逗号. Python ...

  9. 22 Extends 继承(子类、父类)

    本章主要介绍继承的 概念.方法重写(@Override注解的使用).使用场景.方法的执行顺序 /*1.继承的 概念 * 继承:多个类有共同的成员变量和成员方法,抽取到另外一个类中(父类),在让多个类去 ...

  10. java的套接字实现远程连接

    package jnet;//客户端程序,使用套接字连接服务器import java.net.*;import java.io.*;import javax.swing.*; public class ...