C++字符串string

1.string类简介

  string是C++编程语言中的字符串。在C++中字符串处理可以使用c语言字符串形式char *,也可以使用string类格式。
  string 是一个类,类内有char *指针,通过容器方式管理字符串。使用string类型需要需要包含头文件string。

2.string类的构造函数

  string类提供了多种构造函数,支持无参构造、有参构造、拷贝构造。

无参构造:string()
有参构造:string(const char *str);
拷贝构造:string(const string &str);
初始化字符串为count个c字符:string(int count,char c);

  • 使用示例:
#include < iostream >
#include < string >
using namespace std;
void test()
{
	string s1;//默认构造,即无参构造函数
	char const* str = "hello,world";//c语言字符串
	string s2(str);//传入C语言字符串
	cout << "s2=" << s2 << endl; 

C++字符串string_第1张图片

3.string类赋值相关函数

  string类中提供"="运算符重载和assign()全局函数进行赋值操。这两种方式均有多个重载版本,如下所示:

string字符串赋值:
  string &operator=(const char *s);//将c字符串赋给string
  string &operator=(const string &s);//将s赋值给string
  string &operator=(char c);//将字符c赋给string
全局函数:
  string &assign(const char *s);//将c字符串赋给string
  string &assign(const char *s,int n);//将c字符串前n个赋给string
  string &assign(const string &s);//将s赋给string
  string &assign(int n,char c);//将n个c赋给string

  • 使用示例:
#include < iostream >
using namespace std;
#include < string >
void test()
{
	string s1="hello,world";//c语言字符串赋值
	cout << "s1=" << s1 << endl;
	string s2 = s1;//将s1赋给s2
	cout << "s2=" << s2 << endl;
	string s3 ;//单个字符赋给string
	s3 = 'c';
	cout <<"s3="<< s3 << endl;
	//全局函数赋值
	s1=assign("c++赋值测试");
	cout<<"s1="<<s1<<endl;
	s2=assign(s1,5);//将s1的前5个字符赋给s2
	s3=assign(s1);//将s1赋给s3
	string s4=assign(10,'a');

C++字符串string_第2张图片

4.string类字符串拼接

  string类中字符串拼接有重载"+="运算和全局函数append方式,均有多种重载版本。

运算符重载
  string &operator+=(const char *s);将s追加到string
  string &operator+=(const string &str);//将str追加到string
  string &operator+=(const char c);//将字符c追加到string
全局函数append
  string &append(const char *s);//将s追加到string
  string &append(const char *s,int n);//将s的前n个追加到string
  string &append(const string &str);//等价于operator+=(const string &str)
  string &append(const string &str,int pos,int n); --从str的第pos位置开始,取出n个字符追加到string中

  • 使用示例:
void test()
{
	//+=运算符重载示例
	string s1 = "C++";
	s1 += "学习";
	s1 += ',';
	cout << "s1=" << s1 << endl;
	string s2 = "学习使我快乐!";
	s1 += s2;
	cout << "s1=" << s1 << endl;
	//append示例
	string s3;
	s3 = "C++";
	s3.append("学习");

	s3.append(s2,4);//从s2的第4个字符开始,将s2的字符拼接到s3
	cout << "s3=" << s3 << endl;
	s3.append(s2, 4,4);
	cout < < "s3=" << s3 << endl;//从s2的第4个字符开始,将s2的接下来4个字符拼接到s3
	s3.append("月入过万!");
	cout < < "s3=" < < s3 << endl;
	s3.append("我的未来不是梦",4,10);//从第4个位置开始截取10个字符拼接到s3
	cout < < "s3=" << s3 << endl;
}
int main()
{
	test();
	system("pause");
}

C++字符串string_第3张图片

5.字符串查找与替换

  string字符串查找有find、rfind函数。

  • find函数是从左往右查找,查找成功返回第一个出现的下标,失败返回-1。
  • rfind是查找最后一个出现的下标,失败返回-1。 replace函数实现字符串替换。
//find函数:从左往右查找
返回值:查找成功返回出现的位置,失败返回-1
int find(const string&str,int pos=0)const;//形参pos表示开始查找的起始位置
int find(const char *str,int pos=0)const;
int find(const char *str,int pos=0,int n)const;//从str的第pos开始的前n个字符中str出现的位置
int find(const char c,int pos=0);//查找字符c
//rfind函数:从右往左查找
int rfind(const string &str,int pos=npos);从pos位置开始查找str最后一次出现的位置
int rfind(const char *str,int pos=npos);从pos位置开始查找str最后一次出现的位置
int rfind(const char *str,int pos=pos,int n);从pos开始的前n个字符中str最后一次出现的位置
int rfind(const char c,int pos=0);//查找c最后一次出现的位置
//字符串替换
string &replace(int pos,int n,const string &s);//将字符串的第pos位置开始的n个字符替换成s
string &replace(int pos,int n,const char *s);
  • 使用示例:
#include < iostream >
#include < string >
using namespace std;
void test()
{
	string str = "1asd3as456asd4789asd";
	int pos = str.find("asd");//查找asd第一次出现的位置
	cout << "pos=" << pos << endl;
	string temp = "asd";
	pos = str.find(temp,7);//从第7个位置开始查找asd出现的位置
	cout << "pos=" << pos << endl;

	pos = str.rfind(temp);//查找最后一次出现的位置
	cout << "pos=" << pos < < endl;
	pos = str.rfind("asd",7,2);//从第3个位置开始往前查找,查找"asd"中的前2个字符在str中最后一次位置
	cout << "pos=" << pos << endl;
	//字符串替换
	str.replace(1, 7, "c++");//从第一个位值开始将str的7个字符替换为c++
	cout << "str=" << str << endl;
}
int main()
{
	test();
	system("pause");
}

C++字符串string_第4张图片

6.字符串比较

  string类中字符串比较函compare数有多个重载版本,既可以和C语言风格const char *字符串进行比较,也可以和string类字符串进行比较。相等返回0,不相等返回!0值。

字符串比较:
int compare(const char *str);//相等返回0,否则返回非0值
//比较string的len个字符,从idx位置开始
int string::compare (size_type idx, size_type len, const string& str) const
//从指定位置指定长度开始比较
int string::compare (size_type idx, size_type len, const string&str, size_type str_idx, size_type str_len) const
  • 使用示例:
#include < iostream >
using namespace std;
#include < string >
void test()
{
	string str1 = "hello,world";
	if (str1 == "hello,world")
	{
		cout << "[const char *]相等" << endl;
	}
	string str2 = "hello,world";
	if (str1 == str2)
	{
		cout << "[string]相等" << endl;
	}
	if (!str1.compare("hello,world"))
	{
		cout << "[compare]相等" << endl;
	}
	//比较str1的前6个字符
	int ret=str1.compare(0,6,"hello,");
	cout << "ret=" << ret << endl;
	//从str1的第0个开始开始取出6个字符,
	//从"c++,hello,"的第4个位置开始,取出6个字符进行比较
	ret = str1.compare(0, 6, "c++,hello,", 4, 6);
	cout << "ret=" << ret << endl;
}
int main()
{
	test();
	system("pause");
}

C++字符串string_第5张图片

7.string字符串以字符方式读写

  string类字符串使用字符方式访问,可以使用重载"[]"版本函数,即可以和C语言中访问方式一样,也可以使用函数at来访问。
  string类中对于字符串的长度获取,可以使用size()函数或者length()函数来实现。

string以字符方式访问
	char &operator[](int n);
	char &at(int n);
string 中获取字符串长度
	str.size();
	str.length();
  • 使用示例:
#include < iostream >
#include < string >
using namespace std;
void test()
{
	string str = "hello,world";
	cout << "str长度:" << str.size() << endl;
	cout << "str长度:" << str.length() << endl;
	//修改成员
	for (int i = 0; i < str.size(); i++)
	{
		str[i] = i+'0';
	}
	//遍历
	for (int i = 0; i < str.size(); i++)
	{
		cout << str.at(i) << " ";
	}
	cout << endl;
}
int main()
{
	test();
	system("pause");
}

C++字符串string_第6张图片

8.string字符串的插入与删除

  string类中插入函数insert支持多种插入方式,有多个重载版本。
  字符串删除可以使用erease函数实现。

c++插入:
string& insert(int pos,const char *s);//从第pos位置开始插入s
string& insert(int pos,const string &s);

string &insert(int p0, const char *s, int n);//从p0位置开始插入s,插入的s连续n个字符
string &insert(int p0,const string &s, int pos, int n);//从p0位置开始插入s,插入的s从pos开始,连续n个字符

string &insert(int p0, int n, char c);//从p0处插入n个字符c

c++删除字符串
string &erase(int pos,int n=npos);//从pos位置开始删除n个字符
  • 使用示例:
#include < iostream >
#include < string >
using namespace std;
void test()
{
	string str = "hello,";
	str.insert(2,"aaa");//从第2个位置开始插入aaa
	cout < < "str=" << str << endl;
	str.insert(4, "1234", 1, 2);//从第4个位置插入,从"1234"的第1个位置开始,连续两个字符插入到str中
	cout << "str=" << str << endl;

	//字符串删除
	str.erase(2,4);//从第2个位置开始,删除4个字符
	cout << "str=" << str << endl;
	str.erase();//清空字符串
	cout < < "str=" << str <<"\t长度:"<< str.size()<<endl;

C++字符串string_第7张图片

9.子字符串提取

  string类中对于子字符串的提取,可以使用函数substr实现。
  判断string类字符串是否为空,即长度是否为0可以使用empty函数实现。

//子字符串提取
string substr(int pos=0,int n=npos)const;//从pos位置提取n个子字符
//判断字符串是否为空
bool empty();
  • 使用示例:
#include 
#include 
using namespace std;
void test()
{
	string str="123456asd12";
	string temp=str.substr(6,3);//从下标6位置提取3个字符
	cout<<"temp="<<temp<<endl;
	string str2;
	if(str2.empty())
	{
		cout<<"字符串为NULL"<<endl;
	}
	else
	{
		cout<<"字符串不为NULL"<<endl;
	}
	if(str2=="")
	{
		cout<<"字符串为NULL"<<endl;
	}
}
int main()
{
	test();
	system("pause");
}

C++字符串string_第8张图片

10.string类转换为char *

  将string字符串转换为char *字符串,可以使用c_str函数实现。

const char *c_str();
const char *data();
在c11版本之后,这两个函数功能一致,都是将string类型字符串转换成char *,返回一个char *字符串,以'\0'结尾。
  • 使用示例:
#include < iostream >
#include < string >
using namespace std;
int main()
{
	string str = "hello,world";
	const char* p = str.c_str();
	cout << "p=" < < p << endl;
	p = str.data();
	cout << "p=" << p << endl;
	system("pause");
}

C++字符串string_第9张图片

你可能感兴趣的:(C++,c++,string)