当前课程知识点:C++语言程序设计基础 > 第6章 数组、指针与字符串(二) > 字符串 > string类
string类
使用字符串类string表示字符串
string实际上是对字符数组操作的封装
string类常用的构造函数
string(); //默认构造函数,建立一个长度为0的串
例:
string s1;
string(const char *s); //用指针s所指向的字符串常量初始化string对象
例:
string s2 = “abc”;
string(const string& rhs); //复制构造函数
例:
string s3 = s2;
string类常用操作
s + t 将串s和t连接成一个新串
s = t 用t更新s
s == t 判断s与t是否相等
s != t 判断s与t是否不等
s < t 判断s是否小于t(按字典顺序比较)
s <= t 判断s是否小于或等于t (按字典顺序比较)
s > t 判断s是否大于t (按字典顺序比较)
s >= t 判断s是否大于或等于t (按字典顺序比较)
s[i] 访问串中下标为i的字符
例:
string s1 = "abc", s2 = "def";
string s3 = s1 + s2; //结果是"abcdef"
bool s4 = (s1 < s2); //结果是true
char s5 = s2[1]; //结果是'e'
例6-23 string类应用举例
#include <string>
#include <iostream>
using namespace std;
//根据value的值输出true或false
//title为提示文字
inline void test(const char *title, bool value)
{
cout << title << " returns "
<< (value ? "true" : "false") << endl;
}
int main() {
string s1 = "DEF";
cout << "s1 is " << s1 << endl;
string s2;
cout << "Please enter s2: ";
cin >> s2;
cout << "length of s2: " << s2.length() << endl;
//比较运算符的测试
test("s1 <= \"ABC\"", s1 <= "ABC");
test("\"DEF\" <= s1", "DEF" <= s1);
//连接运算符的测试
s2 += s1;
cout << "s2 = s2 + s1: " << s2 << endl;
cout << "length of s2: " << s2.length() << endl;
return 0;
}
考虑:如何输入整行字符串?
用cin的>>操作符输入字符串,会以空格作为分隔符,空格后的内容会在下一回输入时被读取
输入整行字符串
getline可以输入整行字符串(要包string头文件),例如:
getline(cin, s2);
输入字符串时,可以使用其它分隔符作为字符串结束的标志(例如逗号、分号),将分隔符作为getline的第3个参数即可,例如:
getline(cin, s2, ',');
例6-24 用getline输入字符串
include <iostream>
#include <string>
using namespace std;
int main() {
for (int i = 0; i < 2; i++){
string city, state;
getline(cin, city, ',');
getline(cin, state);
cout << "City:" << city << “ State:" << state << endl;
}
return 0;
}
运行结果:
Beijing,China
City: Beijing State: China
San Francisco,the United States
City: San Francisco State: the United States
大家好
欢迎回来继续学习
C++语言程序设计
这一节我们来学习string
string类是C++标准库里面的
一个封装起来的字符串
实际上相当于
一个封装起来的字符数组
只是它非常的好用
不仅我们可以不用考虑
长度越界的问题
不用考虑
这个访问的时候
下标越界的问题
而且呢
它本身就带有非常好用的功能
比如说字符串拼接 赋值
这些功能
都不用我们再去调用函数了
我们来看一下
这个string类
它有哪些常用的构造函数
首先是这个默认构造函数
它用于建立一个长度为0的串
虽然它建一个长度为0的串
但是你事后给这个串
输入数据的时候
它并不会因此越界
它的长度会根据需要去延展的
我们还可以用一个指针s
所指向的字符串常量
来初始化这个新的string对象
它还有常用的一个复制构造函数
可以用已有的字符串
去初始化新的字符串
那么这里列出了一些string类
它常用的操作
首先我们看这个加法操作
是不是很熟悉
string类的对象
居然可以做加法吗
实际上这个加法操作呢
作用在string类的对象上
它表现的是字符串的拼接
它会将加法运算符
左边和右边的这两个对象
连成一个新串
还可以赋值
赋值就会用
赋值运算符右边的这个t
去更新赋值运算符左边的这个s
另外呢
就是非常常用的这个关系运算
比较相等 不等
大于 小于这些
特别好用的一点是
它还可以像访问字符数组一样
用对象名
方括号下标的方式
去访问其中下标为i的
或者说序号为i的这个字符
这里面这个字符的下标
或者序号呢
它也是从0开始的
这一点跟我们用数组
是相同的
那这里给出了几个我们用
字符串
也就是string类的功能
来操作string类对象的例子
这里有初始化
有做加法 就是拼接
还有关系运算
有下标运算
为什么这个类的对象
可以做这么多运算呢
学了第八章以后我们就知道了
实际上这个类里面
重载了这些我们常用的运算符
给它赋予了不同的特殊含义
下面这个例题呢
我们演示一下string类的用法
这一个例子呢
演示了string类的使用方法
从逻辑上来讲呢
没有去实现什么样的复杂功能
但是它只是演示了一下
string类的对象可以怎么用
我们看这里构造一个
string类的对象
它可以用字符串常量去初始化它
string的对象
也可以用cout去输出
然后我们再来看
定义这样一个string对象s2
它是没有给初始值的
所以默认初始化
它的长度是0
但是不要担心
虽然它的长度是0
我们尽管可以从键盘去
输入字符串放到里面去
在需要的时候
它的长度会自己扩展的
不会变成越界的
你输入多少个字符都是可以的
输入完以后呢
我们可以再输出它的长度
大家可以运行验证一下
看看是不是这种情况
那另外呢
这个string对象
也可以进行比较运算
比如说
它可以跟这个字符串常量
进行比较
那么我们另外用一个test函数
去输出这个比较的结果
是真还是假
那么我们将这个比较的结果值呢
作为bool值参数代进来
然后在这里面
我们用这样一个
cout去转换一下
输出的结果是真或者假
这个字符串
用的是这个条件运算
另外呢
再来看
我们可以用加法去做字符串
与字符串的拼接
拼接以后呢
我们再测一下它的长度
看它的效果
这个例题呢
大家课后可以自己去
下载运行一下
看看效果
你就知道字符串对象
它有多么好用了
我们知道
当我们用cin这个对象
用它的提取运算符
从键盘输入数据的时候
它是自动以空格为分隔符的
可是有的时候我们希望
输入一整行字符串
里面包括空格
那么用cin和提取运算符
就完成不了这个任务了
这个时候怎么办呢
我们可以用getline函数
来整行输入字符串
包括空格
那我们来看getline函数呢
它的第一个参数
是一个输入流对象
如果我们给它cin
就表示从键盘输入
等我们学习了文件io以后
我们知道
这里还可以放别的输入流对象
比如说从文本文件中读取
也是可以的
那么第二个参数呢
可以是一个字符串对象
还可以有可选的第三个参数
如果你只给它两个参数
getline函数会默认地
以你的换行作为结束符
如果说你给出第三个参数的话
你可以用第三个参数来指定
getline函数读取字符串
到什么字符结束
这样的话
我们就可以随心所欲地读取
含有空格的字符串
随心所欲地指定
以什么符号
作为这个字符串的分隔符
也就是结束标记
下面我们来看一个
用getline函数
整行输入字符串的例子
这个例子呢
演示了string类的使用方法
从逻辑上来讲呢
没有去实现什么样的复杂功能
但是它只是演示了一下
string类的对象
可以怎么用
我们看这里构造一个
string类的对象
它可以用字符串常量去初始化它
string的对象
也可以用cout去输出
然后我们再来看
定义这样一个string对象s2
它是没有给初始值的
所以默认初始化它的长度是0
但是不要担心
虽然它的长度是0
我们尽管可以从
键盘去输入字符串放到里面去
在需要的时候
它的长度会自己扩展的
不会变成越界的
你输入多少个字符都是可以的
输入完以后呢
我们可以再输出它的长度
大家可以运行验证一下
看看是不是这种情况
那另外呢
这个string对象呢
也可以进行比较运算
比如说
它可以跟字符串常量进行比较
那么我们另外用一个test函数
去输出这个比较的结果
是真还是假
那么我们将这个比较的结果值
作为bool值参数代进来
然后呢
在这里面我们用这样一个
cout去转换一下
输出的结果是真或者假
这个字符串
用的是这个条件运算
另外呢
再来看我们可以用加法
去做字符串与字符串的拼接
拼接以后呢
我们再测一下它的长度
看看它的效果
这个例题呢
大家课后可以自己去
下载运行一下
看看效果
你就知道字符串对象
它有多么好用了
-导学
--第1章导学
-计算机系统简介
--计算机系统简介
--计算机系统简介 测试题
-计算机语言和程序设计方法的发展
--计算机语言和程序设计方法的发展 测试题
-面向对象的基本概念
--面向对象的基本概念 测试题
-程序的开发过程
--程序的开发过程
--程序的开发过程 测试题
-信息的表示和储存
--计算机的数字系统
--数据的编码表示
--信息的表示和储存 测试题
-实验指导
-导学
--第二章导学
-C++语言概述
--C++语言概述 测试题
-基本数据类型、常量、变量
--程序举例
--基本数据类型、常量、变量 测试题
-运算与表达式
--运算与表达式 测试题
-实验二:简单程序设计(上)
-数据的输入和输出
--数据的输入和输出
--数据的输入和输出 测试题
-选择结构
--if语句
--switch语句
--选择结构 测试题
-循环结构
--for语句
--循环结构 测试题
-自定义类型
--自定义类型
--自定义类型
-第2章小结
--第二章小结
-实验二:C++简单程序设计(下)
-导学
--导学
-函数定义
--函数定义
--函数定义 测试题
-函数调用
--例3-2
--例3-3
--例3-4
--例3-5
--例3-6
--函数调用 测试题
-嵌套与递归
--例3-9
--例3-10
--嵌套与递归 测试题
-函数的参数传递
--函数的参数传递
--函数的参数传递 测试题
-引用类型
--引用类型 测试题
-含有可变参数的函数
--含有可变参数的函数 测试题
-内联函数
--内联函数 测试题
-constexpr函数
--CONSTEXPR函数课后习题
-带默认参数值的函数
--带默认参数值的函数 测试题
-函数重载
--函数重载 测试题
-C++系统函数
--C++系统函数习题
-第3章小结
--第三章小结
-实验三(上)函数的应用
-实验三(下)函数的应用
-导学
--导学
-面向对象程序的基本特点
--面向对象程序的基本特点 测试题
-类和对象
--类和对象的定义
--类和对象 测试题
-构造函数
--构造函数基本概念
--委托构造函数
--复制构造函数
--构造函数 测试题
-析构函数
--析构函数
--析构函数 测试题
-类的组合
--类的组合
--类的组合程序举例
--前向引用声明
--类的组合 测试题
-UML简介
--UML简介
--UML简介课后习题
-结构体与联合体
--结构体与联合体 测试题
-枚举类
--枚举类
--枚举类 测试题
-第4章小结
--第四章小结
-实验四(上)
--实验四(上)
-实验四(下)
--实验四(下)
-导学
--导学
-标识符的作用域与可见性
--标识符的作用域与可见性 测试题
-对象的生存期
--对象的生存期
--对象的生存期 测试题
-类的静态成员
--类的静态成员 测试题
-类的友元
--类的友元 测试题
-共享数据的保护
--共享数据的保护 测试题
-多文件结构和预编译命令
--多文件结构和预编译命令 测试题
-第5章小结
--小结
-实验五
--实验五
-导学
--导学
-数组的定义与初始化
--数组的定义与使用
--一维数组应用举例
--数组的定义与初始化 测试题
-数组作为函数的参数
--数组作为函数的参数 测试题
-对象数组
--对象数组
--对象数组 测试题
-基于范围的for循环
-指针的定义和运算
--指针的定义和运算 测试题
-综合实例
--综合实例
-实验六(上)
--实验六上
-指针与数组
--指针数组
--指针与数组 测试题
-指针与函数
--指针类型的函数
--指向函数的指针
--指针与函数 测试题
-对象指针
--对象指针
--对象指针 测试题
-动态内存分配
--动态内存分配 测试题
-智能指针
--智能指针
-vector对象
--vector对象
--vector对象 测试题
-对象复制与移动
--移动构造
--对象复制与移动 测试题
-字符串
--C风格字符串
--string类
--字符串 测试题
-第6章小结
--第六章小结
-综合实例
--综合实例
-实验六(下)
--实验六(下)