c++ - string接口的使用


一、默认成员函数

1、构造函数
(1)函数原型

string();
string (const string& str);
string (const string& str, size_t pos, size_t len = npos);	//static const size_t npos = -1; 为很大的数
string (const char* s);	//利用 char* s类型构造
string (const char* s, size_t n);	//利用char * s,从一开始的位置到第n个位置,当n大于s的长度时,n就等于s的长度
string (size_t n, char c);	//利用n个c进行构造
template <class InputIterator>	//利用迭代器进行构造 左闭右开
  string  (InputIterator first, InputIterator last);

(2)演示:

//构造
void test01()
{
	//无参
	string s1();

	//char *s
	string s2("hehe");
	cout << s2 << endl;

	//拷贝
	string s3(s2);
	cout << s3 << endl;

	//string  取一部分	// pos开始 ,size_s npos = -1 
	string s4(s2, 0, 3);
	cout << s4 << endl;

	//char *s 取一部分
	string s5("hehe", 10);
	cout << s5 << endl;

	//用 n 个 char c初始化
	string s6(10, 'c');
	cout << s6 << endl;
	
	//利用迭代器构造
	string s7(s6.begin(), s6.end());
	cout << s7 << endl;

}

在这里插入图片描述

2、析构函数:
这个函数我们不会用到。

3、赋值函数
(1)函数原型

//进行赋值
string& operator= (const string& str);	//用一个同类型进行赋值
string& operator= (const char* s);	//用一个字符串进行赋值
string& operator= (char c);	//用一个字符进行赋值

(2)演示:

//赋值运算符重载
void test04()
{
	string s1("hehe");

	string s2;
	string s3;
	string s4;

	s2 = s1;
	s3 = "hehe";
	s4 = 'c';

	cout << s2 << endl;
	cout << s3 << endl;
	cout << s4 << endl;

}

在这里插入图片描述

二、常用遍历用到的接口

(1)函数原型

//迭代器
string::iterator being();//返回第一个位置的迭代器
string::iterator end();//返回结束位置下一个位置的迭代器
reverse_iterator rbeign();//返回结束位置的迭代器
reverse_iterator rend();//返回开始的前一个位置的迭代器

//at访问位置的值
char& at (size_t pos);	//返回pos位置的值
const char& at (size_t pos) const;	//返回const修饰的pos位置的位置的值

//重载 [] 
char& operator[] (size_t pos);
const char& operator[] (size_t pos) const; 

(2)演示:

//重载的[]
string s1("hehe");

for (int i = 0; i < s1.size(); i++)
{
	cout << s1[i] << " ";
}
cout << endl;


//迭代器
string::iterator it = s1.begin();
while (it < s1.end())
{
	cout << *it << " ";
	it++;
}
cout << endl;

//at
for (int i = 0; i < s1.size(); i++)
{
	cout << s1.at(i) << " ";
}
cout << endl;

在这里插入图片描述

三、常用连接、插入、修改、查找、删除常用的函数接口

1、连接
(1)函数原型:

//重载 +=
string& operator+= (const string& str);	//在结尾处连接字符串str
string& operator+= (const char* s);		//在结尾处连接字符串s
string& operator+= (char c);			//在结尾处连接字符c

//append 在字符串结尾连接	
string& append (const string& str);	//在结尾处连接字符串str
string& append (const char* s);	//在结尾处连接字符串s
//连接从迭代器first 到 last 这个区间到结尾 左闭右开
template <class InputIterator>	
   string& append (InputIterator first, InputIterator last);


(2)演示:

//连接
void test03()
{
	string s1("hehe");
	string s2("hehe");

	//重载 +=
	// +=s2
	s1 += s2;
	cout << s1 << endl;
	// += char
	s1 += 'a';
	cout << s1 << endl;
	// += char *
	s1 += "hehe";
	cout << s1 << endl;

	string s3("hehe");
	string s4("hehe");

	// 连接 string
	s3.append(s4);
	cout << s3 << endl;

	//连接 char*
	s3.append("hehe");
	cout << s3 << endl;
}

在这里插入图片描述
2、插入
(1)函数原型

//尾插一个字符
push_back(char c);

//insert 随机插入
 //在pos位置插入一个字符串str
 string& insert (size_t pos, const string& str);	
 //在pos位置插人字符串s
 string& insert (size_t pos, const char* s);	
 //在迭代器插入c
iterator insert (iterator p, char c);
//在迭代器p插入从迭代器first到迭代器last这个区间 左闭右开
template <class InputIterator>
   void insert (iterator p, InputIterator first, InputIterator last);

(2)演示:

//插入
void test06()
{
	string s1("hehe");
	string s2("hehe");

	//尾插一个字符
	s1.push_back('c');
	cout << s1 << endl;

	//在pos位置插入string
	s1.insert(0,s2);
	cout << s1 << endl;

	//在pos位置插入char*
	s1.insert(0, "hehe");
	cout << s1 << endl;
}

在这里插入图片描述
3、修改
(1)函数原型

//assign 全部替换
//用字符串str替换原来的内容
string& assign (const string& str);
//用字符串s替换原来的内容
string& assign (const char* s);	
//迭代器first到迭代器last这个区间替换原来的内容 左闭右开
template <class InputIterator>
   string& assign (InputIterator first, InputIterator last);

//replace替换一部分
//将pos到len位置替换成str
string& replace (size_t pos,  size_t len,  const string& str);
//将迭代器i1到i2替换成str
string& replace (iterator i1, iterator i2, const string& str);
 //将pos到len位置替换成s
string& replace (size_t pos,  size_t len,  const char* s);
//将迭代器i1到i2替换成s 左闭右开
string& replace (iterator i1, iterator i2, const char* s);

(2)演示:

//修改
void test05()
{
	string s1("hehe");
	string s2("he");
	
	//连接stirng
	s1.assign(s2);
	cout << s1 << endl;
	//连接char *
	s1.assign("he");
	cout << s1 <<  endl;

	//迭代器
	s1.assign(s2.begin(),s2.end());
	cout << s1 << endl;

	string s3("hehe");
	//将pos到len位置替换string
	s3.replace(0, 0, s2);
	cout << s3 << endl;

	//将pos到len位置替换char*
	s3.replace(0, 0, "jeje");
	cout << s3 << endl;
}

在这里插入图片描述

4、查找
(1)函数原型

//find从pos位置向后查找  找到返回下标位置,找不到返回npos
//查找字符串str
size_t find (const string& str, size_t pos = 0) const;
//查找字符串s
size_t find (const char* s, size_t pos = 0) const;
//查找字符c
size_t find (char c, size_t pos = 0) const;

//rfind 从pos位置向前找 找到返回下标位置,找不到返回npos
size_t rfind (const string& str, size_t pos = npos) const;
size_t rfind (const char* s, size_t pos = npos) const;	
size_t rfind (char c, size_t pos = npos) const;

(2)演示:

//查找
void test07()
{
	string s1("hehexuzhengyou");

	string s2("xu");

	//向后查找string
	cout << s1.find(s2) << endl;

	//先前查找string
	cout << s1.rfind(s2);
}

在这里插入图片描述
5、删除
(1)函数原型

//清空
clear()

//尾删
pop_back();

//erase 删除
//删除从pos位置开始删除len个
string& erase (size_t pos = 0, size_t len = npos);
//删除迭代器p位置	
iterator erase (iterator p);
//删除迭代器区间左闭右开
iterator erase (iterator first, iterator last);

(2)演示:

//删除
void test08()
{
	string s1("hehe");

	//删除一个
	s1.erase(0, 1);
	cout << s1 << endl;

	//删除迭代器位置
	s1.erase(s1.begin());
	cout << s1 << endl;

	//删除迭代器区间
	s1.erase(s1.begin(), s1.end()-1);
	cout << s1 << endl;

	//清空
	s1.clear();
}

在这里插入图片描述

四、其他一些常用接口

1、函数原型:

//字符串大小
size_t size() const;

//容量
size_t capacity() const;

//是否为空
bool empty() const;

//预留空间->一般用来扩容,不会影响大小
void reserve (size_t n = 0);

//重新指定大小,大于原来的长度就会扩容,短了就会截断,会影响容量
void resize (size_t n);
//长的部分用c来填充
void resize (size_t n, char c);

//返回c语言风格的字符串
const char* c_str() const;

//截一部分字符串,从pos位置开始截len个
string substr (size_t pos = 0, size_t len = npos) const;

//getline非成员函数
//输入一个string,直到遇到delim
istream& getline (istream& is, string& str, char delim);
//输入一个string,直到遇到 /n
istream& getline (istream& is, string& str);

2、演示:

//其他常用函数
void test09()
{
	string s1("hehe");

	cout << "size:" << s1.size() << endl;
	cout << "capacity:" << s1.capacity() << endl;
	if (s1.empty())
	{
		cout << "no" << endl;
	}
	else
	{
		cout << "ok" << endl;
	}

	s1.reserve(100);
	cout << "capacity:" << s1.capacity() << endl;
	s1.resize(10, 'c');
	cout << "size:" << s1.size() << endl;

	cout <<"类型:" << typeid(s1.c_str()).name() << endl;

	cout << s1.substr(0, 4) << endl;
	
}

在这里插入图片描述

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值