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;
}