C++ string字符串类的用法(附带实例)
C++ 提供了 string 类来处理字符串,它在头文件 <string> 中,提供了添加、删除、查找、替换、比较字符串等方法。
创建 string 字符串对象的方法有以下 4 种:
1) 定义字符串,但不进行初始化。例如:
2) 定义字符串的同时进行初始化。例如:
3) 复制其他字符串。例如:
4) 使用 n 个字符 c 来初始化字符串。例如:
例如,下面的代码中变量 s4 被初始化为由 5 个 'a' 字符组成的字符串,也就是 "aaaaa"。
例如:
例如:
例如:
find() 函数可从 pos 位置开始,查找字符串 str 第一次出现的位置,并返回其下标。如果查找不到,则返回 −1。函数原型如下:
例如:
rfind() 函数可从 pos 位置开始,查找字符串 str 最后一次出现的位置并返回其下标;若查找不到,返回 string::npos。函数原型如下:
ind_first_of() 函数用于查找字符串 s2 和字符串 2 共有的字符在字符串 1 中首次出现的位置。例如:
其中,pos 为待提取字符串的起始下标,len 为待提取字符串的长度。例如:
【实例 1】对字符串进行比较。定义 4 个字符串,使用 compare() 函数对字符串进行比较,代码如下:
empty() 函数可判断字符串是否为空。如果字符串为空,返回 1,否则返回 0。
示例代码:
例如,要使用 C语言中的 fopen() 函数打开文件路径,就必须进行转换。c_str() 函数可返回待转换字符串的 const 指针(const char*)。例如:
创建 string 字符串对象的方法有以下 4 种:
1) 定义字符串,但不进行初始化。例如:
string s1;
2) 定义字符串的同时进行初始化。例如:
string s2 = "12345上山打老虎";
3) 复制其他字符串。例如:
string s3 = s2;
4) 使用 n 个字符 c 来初始化字符串。例如:
string(int n, char c);
例如,下面的代码中变量 s4 被初始化为由 5 个 'a' 字符组成的字符串,也就是 "aaaaa"。
string s4(5,'a');
C++ string类常用函数
string 类中封装了 insert()、erase()、replace()、delete()、find()、substr()、copy() 等成员函数,下面进行介绍。1、字符串的增、删、改、查函数
1) 插入字符串
insert() 函数可在 pos 位置插入字符串 str,其函数原型如下:string& insert(size_t pos, const string& str);其中,pos 表示插入位置,也就是下标;str 表示待插入的字符串。
例如:
s1 = "1234567890"; s2 = "5555"; s1.insert(5, s2); // 将 s2 插入到 s1 的下标 5 处,插入后 s1 变为 "12345555567890"
2) 删除字符串
erase() 函数可从 pos 位置开始,删除 len 个字符,其函数原型如下:string& erase(size_t pos = 0, size_t len = npos);其中,pos 表示待删除字符串的起始下标;len 表示待删除字符串的长度,如果不指定,将删除从 pos 到字符串结束处的所有字符。
例如:
s1 = s2 = s3 = "1234567890"; s2.erase(6); // 在 s2 中,从下标 6 开始,删除后面所有字符,删除后 s2 变为 "123456" s3.erase(6, 2); // 在 s3 中,从下标 6 开始,删除 2 个字符,删除后 s3 变为 "12345690"
3) 替换字符串
replace() 函数可将从 pos 位置开始的 n 个字符替换为 s2,函数原型如下:replace(int pos, int n, const string &s2);
例如:
s1 = "1234567890"; s2 = "aaa"; s1.replace(5, 3, s2); // 在 s1 中,将下标 5 开始的 3 个字符替换成 s2,替换后 s1 变为 "12345aaa90"
4) 查找字符串
查找字符串涉及 3 个函数,分别是 find()、rfind() 和 find_first_of()。find() 函数可从 pos 位置开始,查找字符串 str 第一次出现的位置,并返回其下标。如果查找不到,则返回 −1。函数原型如下:
size_t find(const string& str, size_t pos = 0) const;其中,str 为待查找的字符串;pos 为查找位置,如果不指定,默认从下标 0 开始查找。
例如:
string s1 = "my black hair"; string s2 = "black"; int index = s1.find(s2); // 在 s1 中查找 s2 第一次出现的位置,这里返回下标 3
rfind() 函数可从 pos 位置开始,查找字符串 str 最后一次出现的位置并返回其下标;若查找不到,返回 string::npos。函数原型如下:
size_t rfind(const string& str, size_t pos = 0) const;例如:
string s1 = "my black hair"; string s2 = "black"; int index = s1.rfind(s2, 2); // 在 s1 中查找 s2 最后一次出现的位置,这里返回下标 3
ind_first_of() 函数用于查找字符串 s2 和字符串 2 共有的字符在字符串 1 中首次出现的位置。例如:
string s1 = "tomorrow is another day"; string s2 = "you"; int index = s1.find_first_of(s2); // s1 和 s2 共同字符为 'o',该字符在 s1 首次出现的下标是 1
2、提取字符串
substr() 函数可从 pos 位置开始,提取 len 个字符,函数原型如下:string substr(size_t pos = 0, size_t len = npos);
其中,pos 为待提取字符串的起始下标,len 为待提取字符串的长度。例如:
string s1 = "tomorrow is another day"; string s2; s2 = s1.substr(9, 2); // 从下标 9 开始提取 2 个字符,结果为 "is"
3、字符串比较
compare() 函数可从 pos 位置开始,提取 n 个字符,得到的字符串和 s2 进行比较,函数原型如下:s.compare(size_type pos, size_type n, s2);若比较结果相同,返回 0;若字符串 s 的字典顺序先于 s2,返回负值,否则返回正值。
【实例 1】对字符串进行比较。定义 4 个字符串,使用 compare() 函数对字符串进行比较,代码如下:
#include <iostream> #include <string> using namespace std; int main() { string A("AacdEF"); string B("AbCdEf"); string C("123abc"); string D("123dfg"); // 下面是各种比较方法 int m = A.compare(B); // "AacdEF" 和 "AbCdEf" 完整比较 int n = A.compare(2, 4, B, 2, 4); // "cdEF" 和 "CdEf" 比较 int p = A.compare(4, 2, B); // "EF" 和 "AbCdEf" 比较 int q = C.compare(0, 3, D, 0, 3); // "123" 和 "123" 比较 string t("E"); string y("a"); int z = t.compare(y); // "E" 和 "a" 比较 cout << "m = " << m << ", n = " << n << ", p = " << p << ", q = " << q << ", z = " << z << endl; return 0; }compare() 函数可以区分大小写,输出整型数据 m,n,p,q 的值分别为 −1,1,1,0,如下图所示:
m = -1, n = 1, p = 1, q = 0, z = -1
4、获得字符串长度
length() 函数可计算字符串的长度。例如:string a("AacdEF"); int b = a.length(); // 返回 6
empty() 函数可判断字符串是否为空。如果字符串为空,返回 1,否则返回 0。
string a("AacdEF"); int b = a.empty(); // 返回 0
5、字符串的拼接
C++ 中使用运算符 “+” 可以拼接两个字符串。“+” 的两边可以是:- 两个 string 对象;
- 一个 string 对象和一个字符指针;
- 一个 string 对象和一个字符数组;
- 一个 string 对象和一个单独字符。
示例代码:
#include <iostream> #include <string> using namespace std; int main() { string s1 = "tomorrow"; string s2 = "is "; char *s3 = "another"; char s4[] = "day"; char ch = '!'; string s5 = s1 + s2 + s3 + s4 + ch; cout << s5 << endl; return 0; }输出字符串 s5 的结果为“tomorrow is another day!”。
转换为C语言风格的字符串
实际编程中,有时候需要将 C++ 字符串转换为 C语言风格的字符串,此时要用到转换函数 c_str()。例如,要使用 C语言中的 fopen() 函数打开文件路径,就必须进行转换。c_str() 函数可返回待转换字符串的 const 指针(const char*)。例如:
string path = "D:\\demo.txt"; // path 保存了文件路径 FILE *fp = fopen(path.c_str(), "rt"); // 使用 c_str() 转换为 C 风格字符串