当前课程知识点:程序设计基础(下) >  拓展学习 >  C++中的string类 >  C++中的string类

返回《程序设计基础(下)》慕课在线视频课程列表

C++中的string类资料文件与下载

C++中的string类


C++中的string类

到目前为止涉及到的对字符串的处理是一件比较困难的事情,因为通常在实现字符串的操作时会用到最不容易驾驭的类型——指针。C++标准程序库中提供了一个string类,专门用来处理字符串操作。使用string类操作字符串比之前使用字符型指针char*或字符型数组等操作字符串要方便很多,不必担心内存是否足够、字符串长度等等string类提供了将字符串作为一种数据类型的表示方法,即可以把 string类看成是C++的一个基本数据类型,能像处理普通变量那样处理字符串

使用string类,必须在程序中包含头文件string(注意这里不是string.hstring.h是C字符串头文件)。

1. string类对象的初始化

string类强大,从string类的构造函数就可以看出。string类的构造函数包括:

string(); 创建一个默认的string对象,长度为零;

string(const char *s); string初始为一个由s指向的字符串,以'\0'作为结束标识符

string(size_type n, char c); string初始化一个含有n个字符元素,并且每个字符串元素均为字符c的字符串

string(const string &str, size_type n = npos); string初始化为对象str中从位置n开始到结尾的字符npos是表示最大字符串长度的常量。

string(const char *s, size_type n); string对象初始化为s指向的字符串,长度为n,即使遇到了结束符,也要将结束符之后的拷贝过来

template <class Iter> string(Iter begin, Iter end); string对象初始化为[begin, end]内的字符,其中begin和end的行为就像指针,用于指定位置,范围包括begin在内,但是不包括end

【例1string类常用的几种初始化对象的方法

#include <iostream>

#include <string>        //需要包含string头文件,才能使用string类

using namespace std;

int main()

{

char str[] = "C style string";

string s0;          //初值为空的字符串对象

  string s1("string")   //初值为字符串对象

cout<<s1<<endl;

    string s2(str);       //初值为" C style string "字符串对象

    cout<<s2<<endl;

string s3(str,2,3);    //初值为从str的第2个字符开始,复制3个字节的字符串,

//即"sty"字符串对象

    cout<<s3<<endl;

    string s4(s1);       //初值为用s1对象初始化的字符串对象, 即"string"

    cout<<s4<<endl;

string s5(str,3)      //初值为用str前3个字符的字符串对象,即"C s"

    cout<<s5<<endl;

    string s6(10,'k');     //初值为10个字符'k'的字符串对象,即"kkkkkkkkkk"

    cout<<s6<<endl;

return 0;

}

运行结果为:

string

C style string

sty

string

C s

kkkkkkkkkk

2. string类操作

字符串操作函数是C++字符串的重点,下面先把一些常用的成员函数(运算符)罗列出来,然后通过一个简单的例子,让读者进一步了解string操作函数的使用

=,assign()赋以新值

swap()交换两个字符串的内容

+=,append(),push_back()在尾部添加字符

insert()插入字符

erase()删除字符

clear()删除全部字符

replace()替换字符

+串联字符串

==,!=,<,<=,>,>=,compare()比较字符串

size(),length()返回字符串长度

max_size()返回字符的可能最大个数

empty()判断字符串是否为空

capacity()返回重新分配之前的字符容量

reserve()保留一定量内存以容纳一定数量的字符

[ ], at()存取单一字符

>>,getline()stream读取某值

<<值写入stream

copy()将某值赋值为一个C_string

c_str()将内容以c_string返回

data()将内容以字符数组形式返回

substr()返回某个子字符串

find():查找函数

【例2string类的一些常用成员函数(运算符)的使用

#include <iostream>

#include <string>

using namespace std;

int main()

{

//初始化和赋值

string s1,s2,s3;                

s1="The first string";     //使用赋值号赋值

cout<<s1<<endl;

s2.assign("The second string"); //使用assign()函数赋值

cout<<s2<<endl;

s3.assign("123456789",3);     //用指定字符串的前3个字符赋值

cout<<s3<<endl;

//swap()交换字符串函数

s1.swap(s2);                 //交换字符串s1s2

cout<<"s1="<<s1<<endl;

cout<<"s2="<<s2<<endl;

s2.swap(s1); //再次交换字符串s1s2

//append(),push_back(),添加字符串函数

s1.append(" is appended with a new string"); //append()方法可以在末尾添加字符串

s2.push_back('!'); //push_back()方法只能在末尾添加一个字符

cout<<s1<<endl;

cout<<s2<<endl;

//insert(),插入函数

s1.insert(0,"begin ");             //在头部插入字符串"begin "

s2.insert(s2.size()," end");         //在尾部插入字符串" end"

cout<<s1<<endl;

cout<<s2<<endl;

//erase(),clear(),删除函数

s1.erase(0,6);                    //从下标0到下标6, 即删除掉了"begin "

s2.erase(s2.length()-4,4);         //删除掉了" end "

cout<<s1<<endl;

cout<<s2<<endl;

s3.clear();                   //clear() 删除全部字符,s3成空字符串

cout<<s3<<endl;

//replace(),替换函数

s1.replace(4,5,"!!!!!!!!");     //从第5个字符开始的5个的字符替换成"!!!!!!!!"

cout<<s1<<endl;

//==,!=,<,<=,>,>= 比较字符串

    s1 = "abcdefg";

s2 = "abcdefg";    

if (s1==s2)

cout<<"s1 == s2"<<endl;

s2 = "abcdxyz";   

if (s1!=s2)

cout<<"s1 != s2"<<endl;

if (s1>s2)

cout<<"s1 > s2"<<endl;

if (s1<=s2)

cout<<"s1 <= s2"<<endl;

else

cout<<"s1 > s2"<<endl;

//empty(),判断字符串是否为空

if (s3.empty())                     //判断字符串是否为空

cout<<"s3 is empty."<<endl;

else

cout<<"s3 is not empty."<<endl;

//重载运算符++=实现字符串连接  

s3=s3+"ABC";               //字符串拼接

cout<<s3<<endl;

s3+="XYZ";                 //字符串拼接 

cout<<s3<<endl;

// [ ], at() 存取单一字符

cout<<"use []:"<<endl;

for(int i=0; i<s3.length(); i++)   //length()返回字符串长度函数

    {

        cout<<s3[i];                  //取第i个字符

    }

cout<<endl;

cout<<"use at():"<<endl;

for(int i=0; i<s3.length(); i++)        

    {

        cout<<s3.at(i);                //取第i个字符

    }

    cout<<endl;

// substr(),  返回某个子字符串

cout<<s3.substr(2,3)<<endl;     //返回从s3[2]字符开始的长度为3的子字符串

// find(),查找函数

s3="abcabcabc";

cout<<s3.find("bc",0)<<endl; //从下标0开始,查找第一次出现字符串"bc"的下标

cout<<s3.find("bc",3)<<endl; //从下标3开始,查找第一次出现字符串"bc"的下标

return 0;

}

程序的运行结果如图1所示

1  1的程序运行结果

运算符和函数一样,也可以被重载。string类将常用的运算符重载后,在上面的程序中,使用string类对象就像使用基本数据类型一样方便。上面仅对初学者介绍了string类常用的一些函数或运算符。如果需要用到其他的函数,可以查看C++自带的帮助文件。


下一节:面向对象方法应用实例

返回《程序设计基础(下)》慕课在线视频列表

程序设计基础(下)课程列表:

拓展学习

-C++的常见错误

--C++的常见错误

-MFC入门

--MFC入门

-STL及使用示例

--STL及使用示例

-算法设计与算法分析基础

--算法设计和算法分析基础

-算法设计基本方法与策略基础

--算法设计基本方法与策略基础

-计算机前沿问题思考

--计算机前沿问题思考

-QT编程入门

--QT编程入门

-C++中的string类

--C++中的string类

-面向对象方法应用实例

--面向对象方法应用实例

-继承与多态应用实例

--继承与多态应用实例

-排序算法

--排序算法

-C++常见问题汇总

--C++常见问题汇总

南开大学往届学长课程学习感悟

-学习感悟(1)

--学习感悟(1)

-学习感悟(2)

--学习感悟(2)

-学习感悟(3)

--学习感悟(3)

-学习感悟(4)

--学习感悟(4)

-2016级数学院同学分享

优秀大作业展示

-优秀大作业展板

第一章 面向对象方法

-1.1面向对象方法的基本概念

--1.1面向对象方法的基本概念

-1.1面向对象方法的基本概念--作业

-1.2 C++中类的定义

--1.2C++中类的定义

-1.2 C++中类的定义

-1.3C++中对象的定义和访问

--1.3C++中对象的定义和访问

-1.3C++中对象的定义和访问--作业

-1.4类成员的访问控制

--1.4类成员的访问控制

-1.4类成员的访问控制--作业

-1.5析构函数

--1.5析构函数

-1.5析构函数--作业

-1.6拷贝构造函数

--1.6拷贝构造函数

-1.6拷贝构造函数--作业

-1.7 类声明与类实现的分离

--1.7 类声明与类实现的分离

-1.7 类声明与类实现的分离--作业

-1.8类的静态成员

--1.8类的静态成员

-1.8类的静态成员--作业

-1.9类的常量成员

--1.9类的常量成员

-1.9类的常量成员--作业

-1.10this指针

--1.10this指针

-1.10this指针--作业

-1.11类的友元

--1.11类的友元

-1.11类的友元--作业

-1.12类的对象成员

--1.12类的对象成员

-1.12类的对象成员--作业

-1.13自定义类的运算符重载

--1.13自定义类的运算符重载

-1.13自定义类的运算符重载--作业

第二章 继承与多态

-2.1 派生类的定义和继承方式

--2.1 派生类的定义和继承方式

-2.1 派生类的定义和继承方式--作业

-2.2 派生类中函数的重定义

--2.2 派生类中函数的重定义

-2.2 派生类中函数的重定义--作业

-2.3派生类的构造函数和析构函数

--2.3派生类的构造函数和析构函数

-2.3派生类的构造函数和析构函数--作业

-2.4多继承

--2.4多继承

-2.4多继承--作业

-2.5多态

--2.5多态

-2.5多态--作业

-2.6抽象类

--2.6抽象类

-2.6抽象类--作业

第三章 输入输出流

-3.1cout和cin对象及插入和提取运算符

--3.1cout和cin对象及插入和提取运算符

-3.1cout和cin对象及插入和提取运算符--作业

-3.2 使用put和get函数进行标准输出和输入

--3.2 使用put和get函数进行标准输出和输入

-3.3使用getline函数进行标准输入

--3.3使用getline函数进行标准输入

-3.3使用getline函数进行标准输入--作业

-3.4 文件流对象

--3.4 文件流对象

-3.5文件流对象及插入和提取运算符

--3.5文件流对象及插入和提取运算符

-3.5文件流对象及插入和提取运算符--作业

-3.6文件流对象及put、get和getline函数

--3.6文件流对象及put、get和getline函数

-3.7按数据块进行输入输出

--3.7按数据块进行输入输出

-3.8按数据块进行输入输出实例

--3.8按数据块进行输入输出实例

-3.8按数据块进行输入输出实例--作业

-3.9文件的随机读写

--3.9文件的随机读写

-3.9文件的随机读写--作业

-3.10用户自定义数据类型的输入输出

--3.10用户自定义数据类型的输入输出

-3.10用户自定义数据类型的输入输出--作业

第四章 模板

-4.1函数模板

--4.1函数模板

-4.1函数模板--作业

-4.2类模板

--4.2类模板

-4.2类模板--作业

第五章 概论

-5.1数据结构基本概念(一)

--5.1数据结构基本概念(一)

-第五章 概论--5.1数据结构基本概念(一)

-5.2数据结构基本概念(二)

--5.2数据结构基本概念(二)

-5.2数据结构基本概念(二)--作业

第六章 线性表

-6.1线性表及其抽象数据类型

--6.1线性表及其抽象数据类型

-6.1线性表及其抽象数据类型--作业

-6.2顺序表类模板

--6.2顺序表类模板

-6.2顺序表类模板--作业

-6.3顺序表的实现

--6.3顺序表的实现

-6.3顺序表的实现--作业

-6.4简单数据元素顺序表的应用问题

--6.4简单数据元素顺序表的应用问题

-6.4简单数据元素顺序表的应用问题--作业

-6.5复杂数据元素顺序表的应用问题

--6.5复杂数据元素顺序表的应用问题

-6.5复杂数据元素顺序表的应用问题--作业

-6.6单向链表及其类模板

--6.6单向链表及其类模板

-6.6单向链表及其类模板--作业

-6.7单项链表的实现(一)

--6.7单项链表的实现(一)

-6.7单项链表的实现(一)--作业

-6.8单项链表的实现(二)

--6.8单项链表的实现(二)

-6.8单项链表的实现(二)--作业

-6.9单向链表的应用

--6.9单向链表的应用

-6.10循环链表及双向链表

--6.10循环链表及双向链表

第七章 栈和队列

-7.1栈及顺序栈

--7.1栈及顺序栈

-7.1栈及顺序栈--作业

-7.2 顺序栈的实现

--7.2 顺序栈的实现

-7.2 顺序栈的实现--作业

-7.3顺序栈的应用

--7.3顺序栈的应用

-7.4 链接栈及其实现

--7.4 链接栈及其实现

-7.4 链接栈及其实现--作业

-7.5队列及其顺序存储

--7.5队列及其顺序存储

-7.5队列及其顺序存储--作业

-7.6 顺序循环队列的实现

--7.6 顺序循环队列的实现

-7.6 顺序循环队列的实现--作业

-7.7顺序循环队列的应用

--7.7顺序循环队列的应用

-7.8链接队列及其实现

--7.8链接队列及其实现

-7.8链接队列及其实现--作业

第八章 树和二叉树

-8.1树的基本概念

--8.1树的基本概念

-8.1树的基本概念--作业

-8.2二叉树及其性质

--8.2二叉树及其性质

-8.2二叉树及其性质--作业

-8.3二叉树的抽象数据类型和顺序表示

--8.3二叉树的抽象数据类型和顺序表示

-8.3二叉树的抽象数据类型和顺序表示--作业

-8.4二叉树的链式表示

--8.4二叉树的链式表示

-第八章 树和二叉树--8.4二叉树的链式表示

-8.5二叉链表的实现(一)

--8.5二叉链表的实现(一)

-8.6二叉链表的实现(二)先序和中序遍历

--8.6二叉链表的实现(二)先序和中序遍历

-8.6二叉链表的实现(二)先序和中序遍历--作业

-8.7二叉链表的实现(三)后序和逐层遍历

--8.7二叉链表的实现(三)后序和逐层遍历

-8.7二叉链表的实现(三)后序和逐层遍历--作业

-8.8二叉链表的实现(四)

--8.8二叉链表的实现(四)

-8.9 二叉排序树

--8.9 二叉排序树

-8.10哈夫曼树和哈夫曼编码

--8.10哈夫曼树和哈夫曼编码

第九章 图

-9.1图的基本概念及其特征

--9.1图的基本概念及其特征

-9.1图的基本概念及其特征--作业

-9.2图的抽象数据类型和表示方式

--Video

-9.2图的抽象数据类型和表示方式--作业

-9.3图的邻接矩阵表示法的实现

--9.3图的邻接矩阵表示法的实现

-9.3图的邻接矩阵表示法的实现--作业

-9.4图的广度优先遍历

--Video

-9.4图的广度优先遍历--作业

-9.5图的深度优先遍历

--9.5图的深度优先遍历

-9.5图的深度优先遍历--作业

-9.6图的应用

--9.6 图的应用

例题及视频讲解

-面向对象方法

--面向对象例题讲解

-- 类和对象的基本定义、构造函数和析构函数

--静态成员和多文件结构

--友元和运算符重载

--对象成员

-继承与多态

--派生类定义和函数重定义

--多重继承

--虚函数

--抽象类和纯虚函数

-输入输出流

--输入输出流操作

--插入运算符和提取运算符重载

-模板

--函数模板

--类模板

百年南开 风华正茂

-央视新闻关于南开大学的报道

百年沧桑到民族复兴

-从百年沧桑到民族复兴1

-从百年沧桑到民资复兴2

-从百年沧桑到民族复兴3

-从百年沧桑到民族复兴4

-从百年沧桑到民族复兴5

C++中的string类笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。