std::string 是 C++ 标准模板库(STL)中的一个类,用于表示和操作字符串。它封装了动态大小的字符数组,并提供了丰富的成员函数和操作符来方便字符串的处理,下面将进行一些简单功能的介绍。
目录
构造函数
函数原型包括:
string(); //创建一个空的字符串 例如: string str;
string(const char* s); //使用字符串s初始化
stripg(const string& str); //使用一个string对象初始化另一个string对象
string(int n,char c); //使用n个字符c初始化
注意:在使用string时要#include<string>
#include<iostream>
#include<string>
using namespace std;
int main() {
string str;//一个空的字符串
string str2("hello");
string str3(str2);
string str4(5, 'h');
cout << str2 << endl;
cout << str3 << endl;
cout << str4 << endl;
}
这里 const char* s对应的就是“hello”,const string& str对应str2
以下类似,const char* s就是你指定的一个字符串,const string& str就是你已经构造的一个string类。
输出:
hello
hello
hhhhh
赋值操作
string类中重载了=运算符,也可以使用其成员函数assign()
函数原型包括
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赋给当前字符串
int main() {
string str1;
str1 = "hello";
string str2;
str2 = str1;
string str3;
str3 = 'h'; //这里直接写string str3 = 'h';会报错
cout << str1 << endl;
cout << str2 << endl;
cout << str3 << endl;
}
输出:
hello
hello
h
使用assign也与=运算符类似
int main() {
string str1;
str1.assign("hello");
string str2;
str2.assign("hello",2);//将hello的前两个字符给str2
string str3;
str3.assign(str1);
str3.assign(str1, 2, 3);//取str1中从第二个字符开始的三个字符
string str4;
str4.assign(5, 'h');
cout << str1 << endl;
cout << str2 << endl;
cout << str3 << endl;
cout << str4 << endl;
}
hello
he
llo
hhhhh
注意:
hello的第二个字符应该是 l ,而不是e
字符串拼接
函数原型包括:
string& operator+=(const char* str);
string& operator+=(const char c);
string& operator+=(const string& str);
string& append(const char*s);
string& append(const char *s,int n); //把字符串s的前n个字符连接到当前字符串结尾
string& append(const string &s);
string& append(const string &s,int pos,int n);//字符串s中从pos开始的n个字符连接到字符串结尾
int main() {
string str1 = "hello";
str1 += " world";
cout << str1 << endl;
string str2 = " and ";
str1 += str2;
cout << str1 << endl;
str1 += 'c';
cout << str1 << endl;
}
hello world
hello world and
hello world and c
int main() {
string str1 = "hello";
str1.append(" world ");
cout << str1 << endl;
str1.append("world",3);
cout << str1 << endl;
string str2 = " and ";
str1.append(str2);
cout << str1 << endl;
str1.append(str2, 0, 2);//从str2的第0个字符开始,取2个,也就是取空格和a
cout << str1 << endl;
}
hello world
hello world wor
hello world wor and
hello world wor and a
字符串的查找和替换
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
int main() {
string str1 = "hello world";
string str2 = "he";
int a = str1.find("wor");
int b = str1.find('l');
int c = str1.find("wor",0,2);
int d = str1.rfind('l');
cout << a << endl;
cout << b << endl;
cout << c << endl;
cout << d << endl;
str1.replace(6, 5, "cpp");
cout << str1 << endl;
}
6
2
6
9
hello cpp
同样是找 l ,b和d的值不一样,这是因为 find是从前往后找,返回找到的第一个的位置,而rfind是从后往前找,返回第一个找到的位置。
函数原型中有的int pos=0,这就说明pos有初始值,我们可以选择不给其赋值,而在int find(const char*s,int pos,int n)const; 中,两个数都必须赋值的原因就是,如果只给其一赋值,会有歧义,会重载int find(const char*s,int pos=0)const;这个函数
字符串比较
函数原型
int compare(const string &s)const; //与字符串s比较
int compare(const char*s)const; //与字符串s比较
int main() {
string str1 = "hello";
string str2 = "hello";
int a = str1.compare(str2);
cout << a << endl;
string str3 = "ciallo";
int b = str1.compare(str3);
cout << b << endl;
}
compare的返回值是整形,所以我们用a,b来接收,str1.compare(str2)时,若str1>str2,返回1;str1<str2,返回-1;str1=str2,返回0;比较方式为逐一比较字符的ASCLL值,直到比出大小为止。
0
1
由于h的值大于c,所以b为1。
字符存取
char& operator[](int n); //通过[]方式取字符
char& at(int n); //通过at方法获取字符
int main() {
string str1 = "hello";
char a = str1[4];
cout << a << endl;
char b = str1.at(1);
cout << b << endl;
}
o
e
字符串插入和删除
函数原型
string& insert(int pos,const char* s);
string& insert(int pos, const string& str);
string& insert(int pos,int n,char c); //在指定位置插入n个字符c
string& erase(int pos,int n=npos); //删除从pos开始的n个字符
int main() {
string str1 = "hello";
str1.insert(1, "aaa");
cout << str1 << endl;
str1.insert(1, 3, 'c');
cout << str1 << endl;
str1.erase(1, 6);//删除从1开始的六个字符,也就是cccaaa
cout << str1 << endl;
}
haaaello
hcccaaaello
hello
获取子串
string substr(int pos=0,int n=npos)const; //返回由pos开始的n个字符组成的字符串
int main() {
string str = "helloworld";
string sub = str.substr(0, 5);
cout << sub << endl;
}
获得从0开始的五个字符,所以会输出hello
本文章只介绍了string中的部分常见功能,如有错误,请各位大佬不吝指正