C++中STL之string的简单介绍和使用

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中的部分常见功能,如有错误,请各位大佬不吝指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值