文章目录
string
string 基本概念
string本质
- string是c++风格的字符串,而string本质上是一个类
string和char* 区别
- char* 是一个指针
- string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器
特点
- string 内部封装了很多成员方法
- string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责
string构造函数
- string的多种构造方式没有可比性,灵活使用即可
构造函数原型
- 创建一个空字符串
string();
- 使用字符串s初始化
string(const char* s);
- 使用一个string对象初始化另一个string对象
string(const string& str);
- 使用n个字符c初始化
string(int n, char c);
代码示例
#include <iostream>
#include <string>
using namespace std;
// string构造函数
void test() {
string s;
cout << s << endl;
string s1("aaaa");
cout << s1 << endl;
string s2(s1);
cout << s2 << endl;
string s3(5, 's');
cout << s3 << endl;
}
int main() {
test();
return 0;
}
运行结果
string的赋值操作
string赋值的函数原型
- char*类型字符串赋值给当前的字符串
string& operator=(const char* s);
- 把字符串s赋值给当前的字符串
string& operator=(const string &s);
- 字符赋值给当前的字符串
string& operator=(char c);
- 把字符串s赋值给当前的字符串
string& assign(const char* s);
- 把字符串s的前n个字符赋值给当前的字符串
string& assign(const char* s, int n);
- 把字符串s赋值给当前的字符串
string& assign(const string &s);
- 用n个字符c赋值给当前的字符串
string& assign(int n, char c);
代码示例
#include <iostream>
#include <string>
using namespace std;
void test() {
string s;
s = "asdfghjk";
cout << "s: " << s << endl;
string s1;
s1 = s;
cout << "s1: " << s1 << endl;
string s2;
s2 = 'a';
cout << "s2: " << s2 << endl;
string s3;
s3.assign("asdfghjk");
cout << "s3: " << s3 << endl;
string s4;
s4.assign("asdfghjk", 3);
cout << "s4: " << s4 << endl;
string s5;
s5.assign(s3);
cout << "s5: " << s5 << endl;
string s6;
s6.assign(5, 'f');
cout << "s6: " << s6 << endl;
}
int main() {
test();
return 0;
}
结果示例
string字符串拼接
- 实现在字符串末尾拼接字符串
函数原型
代码示例
#include <iostream>
#include <string>
using namespace std;
void test() {
string str1 = "I";
str1 += " am Tom.";
cout << str1 << endl;
str1 += " you are pig";
cout << str1 << endl;
str1 += str1;
cout << str1 << endl;
str1.append("xxx");
cout << str1 << endl;
string str2 = "hhhh";
string str3 = "123456789";
// 主叫从第i个字符之后的字符
str2.append(str3, 5);
cout << str2 << endl;
// 主叫从第i个字符之后的n个 字符
str2.append(str3, 5, 2);
cout << str2 << endl;
}
int main() {
test();
return 0;
}
运行结果
string查找和替换
功能描述
- 查找:查找指定字符串是否存在
- 替换:在指定位置替换字符串
函数原型
字符串查找
-
find和rfind区别
-
find 从左往右找
-
rfind 从右往左找
-
-
找到返回对应位置的下标,没找到返回-1
-
代码示例
#include <iostream>
#include <string>
using namespace std;
void test() {
string str1 = "abcdefghdeaa";
// find 从左往右找
int pos = str1.find("de");
if (pos == -1) {
cout << "未找到" << endl;
} else {
cout << "找到了,pos = " << pos << endl;
}
// rfind 从右往左找
pos = str1.rfind("de");
if (pos == -1) {
cout << "未找到" << endl;
} else {
cout << "找到了,pos = " << pos << endl;
}
}
int main() {
test();
return 0;
}
- 结果
字符串替换
- replace在替换时,要制定从那个位置开始,多少个字符,替换的字符串
#include <iostream>
#include <string>
using namespace std;
void test() {
string str = "asdfghjkl";
str.replace(1, 4, "111111");
cout << str << endl;
}
int main() {
test();
return 0;
}
- 结果
字符串比较
- compare 内部实现:逐字符一个一个按ascii码比较
代码示例
#include <iostream>
#include <string>
using namespace std;
void test() {
string str1 = "hello";
string str2 = "hello";
string str3 = "hello1";
// compare 内部实现:逐字符一个一个按ascii码比较
if (str1.compare(str2) == 0) {
cout << "str1 == str2" << endl;
} else if (str1.compare(str2) > 0) {
cout << "str1 > str2" << endl;
} else {
cout << "str1 < str2" << endl;
}
}
int main() {
test();
return 0;
}
string字符存取
存取方式
-
通过[]方式取字符:
char& operator[](int n);
-
通过at方法获取字符:
char& at(int n);
代码示例
#include <iostream>
#include <string>
using namespace std;
void test() {
string str = "sdsafs";
cout << "通过[]方式访问:";
for (int i = 0; i < str.size(); i++) {
cout << str[i] << " ";
}
cout << endl;
cout << "通过at方式访问:";
for (int i = 0; i < str.size(); i++) {
cout << str.at(i) << " ";
}
cout << endl;
str[1] = 'a';
cout << "通过[]方式访问修改后的字符:";
for (int i = 0; i < str.size(); i++) {
cout << str[i] << " ";
}
cout << endl;
str.at(2) = 'c';
cout << "通过at方式访问:";
for (int i = 0; i < str.size(); i++) {
cout << str.at(i) << " ";
}
cout << endl;
}
int main() {
test();
return 0;
}
运行结果
string插入和删除
- 对string字符串进行插入和删除字符操作
函数原型
代码示例
#include <iostream>
#include <string>
using namespace std;
void test() {
string str = "hello";
// insert 在指定位置插入指定字符串
str.insert(1, "12345");
cout << str << endl;
// delete 删除指定位置开始的n个字符
str.erase(1, 5);
cout << str << endl;
}
int main() {
test();
return 0;
}
运行结果
string字符串
- 从字符串中获取想要的字符串
函数原型
- 返回由pos开始的n个字符组成的字符串:
string substr(int pos=0,int n=npos) const;
代码示例
#include <iostream>
#include <string>
using namespace std;
void test() {
string str = "hello";
string sub = str.substr(1, 3);
cout << sub << endl;
}
int main() {
test();
return 0;
}