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=" < 
C++

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="< 
C++

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++

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++

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++

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++

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长度:"< ()< 
C++

9.子字符串提取

     string类中对于子字符串的提取,可以使用函数substr实现。

     判断string类字符串是否为空,即长度是否为0可以使用empty函数实现。

子字符串提取
string substr(int pos=0,int n=npos)const;//从pos位置提取n个子字符
//判断字符串是否为空
bool empty();

    使用示例:

C++

10.string类转换为char *

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

const char *c_str();
const char *data();
在c11版本之后,这两个函数功能一致,都是将string类型字符串转换成char *,返回一个char *字符串,以'�'结尾。

    使用示例:

#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++

 

  审核编辑:汤梓红

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分