赞
踩
在完成对C语言的学习后,我最近开始了对C++和Java的学习,目前跟着视频学习了一些语法,也跟着敲了一些代码,有了一定的掌握程度。现在将跟着视频做的笔记进行整理。本篇博客是整理C++知识点的第二十三篇博客。
本篇博客介绍了C++的string容器。
本系列博客所有C++代码都在Visual Studio 2022环境下编译运行。程序为64位。
目录
string是C++风格的字符串,本质是一个类。使用string需要包含头文件string。
char *是一个指针。string是一个类,类内封装了char *,管理这个字符串。
string内封装了很多成员方法。
string管理char *分配的内存,不用担心复制越界和取值越界等问题,由类内进行负责。
string()创建一个空的字符串。
string(const char * s)使用字符串进行初始化。
string(const string& str)使用一个string对象初始化另一个string对象
string(int n,char c)使用n个字符c进行初始化。
- #include<iostream>
- #include<string>
- using namespace std;
- int main(void)
- {
- const char* ch = "Hello C++ STL";
- string s1(ch);
- string s2(s1);
- string s3(10, 'h');
- cout << s1 << endl;
- cout << s2 << endl;
- cout << s3 << endl;
- return 0;
- }
程序的输出是:
Hello C++ STL
Hello C++ STL
hhhhhhhhhh
string& operator=(const char* s)将char* 类型字符串赋值给当前的字符串。
string& operator=(const string &s)把字符串s赋值给当前字符串。
string& operator=(char c)将字符赋值给当前字符串。
string& assign(const char* s)将字符串s赋值给当前字符串。
string& assign(const char*s,int n)把字符串s的前n个字符赋给当前字符串。
string& assign(const string &s)将字符串s赋值给当前字符串。
string& assign(int n,char c)用n个字符c赋给当前字符串。
- #include<iostream>
- #include<string>
- using namespace std;
- int main(void)
- {
- string s1;
- s1 = "Hello C++";
- cout << s1 << endl;
-
- string s2;
- s2 = s1;
- cout << s2 << endl;
- string s3;
- s3 = 'C';
- cout << s3 << endl;
- return 0;
- }
程序的输出是:
Hello C++
Hello C++
C
- #include<iostream>
- #include<string>
- using namespace std;
- int main(void)
- {
- string s1;
- s1.assign("Hello C++");
- string s2;
- s2.assign("Hello C++", 5);
- string s3;
- s3.assign(s2);
- string s4;
- s4.assign(10, 'C');
-
- cout << s1 << endl;
- cout << s2 << endl;
- cout << s3 << endl;
- cout << s4 << endl;
- return 0;
- }
程序的输出是:
Hello C++
Hello
Hello
CCCCCCCCCC
string& operator += (const char* str)重载+=运算符。
string& operator += (const char c)重载+=运算符。
string& operator += (const string& str)重载+=运算符。
string& append(const char* s)将字符串s连接到当前字符串结尾。
string& append(const char* s,int n)把字符串s的前n个字符连接到当前字符串结尾。
string& append(const string &s)将s连接到当前字符串结尾。
string& append(const string &s,int pos,int n)将字符串s从pos开始的n个字符连接到字符串结尾。
- #include<iostream>
- #include<string>
- using namespace std;
- int main(void)
- {
- string s1("Hello");
- s1 += " C++";
- cout << s1 << endl;
-
- string s2("Iok");
- s2 += 'e';
- cout << s2 << endl;
-
- string s3("Sam");
- string s4(" FW");
- s3 += s4;
- cout << s3 << endl;
- return 0;
- }
程序的输出是:
Hello C++
Ioke
Sam FW
- #include<iostream>
- #include<string>
- using namespace std;
- int main(void)
- {
- string s1("Hello");
- s1.append(" C++");
- cout << s1 << endl;
- string s2("Hello");
- s2.append("C++ or Java", 3);
- cout << s2 << endl;
- string s3("Sam");
- string s4("FW");
- s3.append(s4);
- cout << s3 << endl;
-
- string s5("This is a test");
- string s6("There is end-term");
- s6.append(s5, 9, 5);
- cout << s6 << endl;
- return 0;
- }
程序的输出是:
Hello C++
HelloC++
SamFW
There is end-term test
int find(const string& str,int pos = 0) const;查找str第一次出现的位置,从pos开始查找。
int find(const char* s,int pos = 0)const;查找s第一次出现的位置,从pos开始查找。
int find(const char* s,int pos,int n)const;从pos位置查找s的前n个字符第一次出现的位置。
int find(const char c,int pos = 0)const;查找字符c第一次出现的位置。
int rfind(const string& str,int pos = npos)const;查找str最后一次出现的位置,从pos开始查找。
int rfind(const char* s,int pos = npos)const;查找s最后一次出现的位置,从pos开始查找。
int rfind(const char* s,int pos,int n)const;从pos开始查找s的前n个字符最后一次出现的位置。
int rfind(const char c,int pos = 0)const;查找字符c最后一次出现的位置。
string& replace(int pos,int n,const string& str)替换从pos开始的n个字符为字符串str。
string& replace(int pos,int n,const char* s)替换从pos开始的n个字符为字符串s。
位置指的是下标,从0开始。npos代表最后一个元素的位置。如果找不到,返回-1。
- #include<iostream>
- #include<string>
- using namespace std;
- int main(void)
- {
- string s1 = "abcdefghijklmnopqrstuvwxyz";
- cout << s1.find("de") << endl;
- cout << s1.find("fr") << endl;
- cout << s1.find("dennis", 0, 2) << endl;
- cout << s1.find("dennis", 0, 3) << endl;
- cout << s1.find('i') << endl;
- cout << endl;
-
- string s2 = "JimanaJuanJoaquinJulianJavierJeanneJuliaJovaJoseJohnJoyceJulietteJerryJulioJosephine";
- cout << s2.find("Ju") << endl;
- cout << s2.rfind("Ju") << endl;
- cout << s2.find("Jo", 0, 2) << endl;
- cout << s2.rfind("Jo", 84, 2) << endl;
- cout << s2.find('i') << endl;
- cout << s2.rfind('i') << endl;
- return 0;
- }
程序的输出是:
3
18446744073709551615
3
18446744073709551615
8
6
70
10
75
1
81
- #include<iostream>
- #include<string>
- using namespace std;
- int main(void)
- {
- string s1 = "JimanaJuanJoaquinJulianJavierJeanneJuliaJovaJoseJohnJoyceJulietteJerryJulioJosephine";
- string s2 = "Jul";
- cout << s1.find(s2) << endl;
- cout << s1.rfind(s2) << endl;
- string s3 = "JK";
- cout << s1.find(s3) << endl;
- cout << s1.rfind(s3) << endl;
-
- string s4 = "abcedfghijklmnopqrstuvwxyz";
- s4.replace(20, 3, "20220717");
- cout << s4 << endl;
- s4.replace(9, 2, s3);
- cout << s4 << endl;
- }
程序的输出是:
17
70
18446744073709551615
18446744073709551615
abcedfghijklmnopqrst20220717xyz
abcedfghiJKlmnopqrst20220717xyz
字符串比较按照ASCII码比较,相等返回0,大于返回1,小于返回-1。
int compare(const string &s)const;与字符串s比较。
int compare(const char* s)const;与字符串s比较。
- #include<iostream>
- #include<string>
- using namespace std;
- int main(void)
- {
- string s1 = "hello";
- string s2("hello");
- cout << s1.compare(s2) << endl;
- cout << s1.compare("Hello") << endl;
- cout << s1.compare("hi") << endl;
- return 0;
- }
程序的输出是:
0
1
-1
char& operator[](int n)通过[]获取字符。
char& at(int n)通过at方法获取字符。
- #include<iostream>
- #include<string>
- using namespace std;
- int main(void)
- {
- string s = "hello";
- int i;
- for (i = 0; i < s.size(); i += 1) {
- cout << s[i] << " ";
- }
- cout << endl;
-
- for (i = 0; i < s.size(); i += 1) {
- cout << s.at(i) << " ";
- }
- cout << endl;
- }
程序的输出是:
h e l l o
h e l l o
string& insert(int pos,const char* s)将s插入到pos的位置。
string& insert(int pos,const string& str)将str插入到pos的位置。
string& insert(int pos,int n,char c)将n个c插入到pos的位置。
string& erase(int pos,int n = npos)删除从pos开始的n个字符。
- #include<iostream>
- #include<string>
- using namespace std;
- int main(void)
- {
- string s1 = "hello";
- s1.insert(1, "lll");
- cout << s1 << endl;
- s1.erase(1, 3);
- cout << s1 << endl;
-
- string s2 = "not";
- s1.insert(2,s2);
- cout << s1 << endl;
- s1.insert(4, 3, 'i');
- cout << s1 << endl;
- return 0;
- }
程序的输出是:
hlllello
hello
henotllo
henoiiitllo
string substr(int pos = 0,int n = npos)const;返回从pos开始的n个字符组成的字符串。
- #include<iostream>
- #include<string>
- using namespace std;
- int main(void)
- {
- string s = "Keith";
- cout << s.substr(1, 2) << endl;
- cout << s.substr(3, 2) << endl;
- return 0;
- }
程序的输出是:
ei
th
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。