C++ 是 C 的超集,因此 C++ 中的字符串可利用 C 的写法,可以戳此链接了解;另外一种方法是利用 string
类库,本文主要介绍这种方式。
string
类使用起来比字符数组简单许多,能够像处理普通数组一样处理字符串。
声明
如果要使用 string
,需要添加 string
头文件,该头文件位于名称空间 std
中。
#include <string>
using namespace std;
声明 string
的方式跟基本数据类型相同,按照变量名加变量类型的方式
string str;
初始化
如果要进行初始化,可以直接给 string
类型的变量进行赋值,还可以使用括号的形式。
string str = "abcd";
string str("abcd");
与其它变量一样,也可使用列表的方式进行初始化。
string str = {"abcd"};
string str {"abcd"};
类的设计能够自动处理 string
的大小,而 C 语言风格数组容易出现字符串长度超过声明大小的现象。
内容访问
- 通过下标访问
可以直接像字符数组那样去访问字符串,如 str[20]
。
- 通过迭代器访问
得到了迭代器 it
,其类似于指针,可以通过 *it
来访问 string
里的每一位元素。begin()
函数表示字符串首个字母的位置,end()
函数表示最后一个字母的下一个位置。
for (string::iterator it = str.begin(); it != str.end(); it++)
cout << *it << endl;;
赋值
string
类操作比数组要简单得多。如果用数组表示,不能将一个数组赋值给另一个数组,但可以将一个 string
对象赋值给另一个 string
对象。
string str1;
string str2 = "abcd";
str1 = str2;
拼接
使用运算符 +
将两个 string
对象合并起来,当然也可使用运算符 +=
。
string str1 = "abc", str2 = "xyz", str3;
str3 = str1 + str2;
str1 += str2;
比较
两个 string
类型可以直接使用 ==
、!=
、<
、<=
、>
、>=
比较大小。
长度
size()
返回 string
的长度,即存放的字符数。length()
功能相同。
str.size();
str.length();
插入
在 pos
号位置插入字符串 str2
。
str.insert(pos, str2);
删除
删除单个元素。
str.erase(*it);
删除一个区间内所有的元素。
str.erase(first, last);
first
为要删除区间的起始迭代器,last
为要删除区间的末尾迭代器的下一个地址。或者 pos
为需要开始删除的起始位置,length
为删除的字符个数。
str(pos, length);
清空string
中的数据。
str.clear();
字串
截取子串。
substr(pos, len);
返回从 pos
号位开始且长度为 len
的子串。
查找
str.find(str2);
当 str2
是 str
的子串时,返回其在 str
中第一次出现的位置;如果 str2
不是 str
的子串,那么返回 string:npos
。
str.find(str2.pos);
从str
的pos
号位置开始匹配str2
,返回值与上相同。
string::npos
是一个常数,其本身值为-1,但由于是unsigned_int
类型,因此实际上也可以认为是 unsigned_int
类型的最大值。string::npos
用作 find
函数失配时的返回值。
if (string::npos == -1);
if (string::npos == 4294967295);
替换
str.replace(pos, len, str2)
把 str
从 pos
号位开始、长度为 len
的子串替换为 str2
。
str.replace(it1, it2, it3);
把 str
的迭代器 [it1, it2) 范围的子串替换为 str2
。
与数进行转换
stoi()
将字符串转化为整型。
string s = "99";
int n = stoi(s)
此外还有 stol()
和 stoll()
函数,分别表示转化为 long
型和 long long
型。还有 stoul()
和 stoull()
函数,表示转化为无符号整型。还有 stof()
、stod()
和 stold()
表示转化为浮点型。
to_string()
表示把整数或浮点数转化为字符串。
int n = 99;
string s = to_string(n);
输入
可使用 cin
输入,但是 cin
以换行、空格等作为分隔,因此使用它只能读取一个单词,不能读取包含空格的字符串。
C++提供了 getline()
和 get()
函数读取一行文本作为字符串输入,详细可戳此链接查看。
更多内容可以查看文档。