C++string类学习总结1

一、标准库中的 string

string类是什么:
string类的详细文档介绍
简要总结:

  1. string 类是表示字符序列(字符串)的类
  2. 使用 string 类,必须包含头文件
#include<string>	
// 如果要使用C风格字符串,可以使用下面两个头文件
#include<string.h>
#include<cstring>
using namespace std;	

int main()
{
	std::string s1;		// 如果不使用using namespace std语句,每次使用string类都需要加 std::
	string s2;	
}
另外,为方便string使用,一般使用语句  using namespace std;
(string类是一个模板类,在名字空间 std 中)否则每次使用需要 std::string
  1. string 类的接口类似于其他容器的接口,但添加了一些专门用于操作单字节字符,字符串的操作.
  2. string 类的底层是 basic_string 模板类使用 char 实例化的一个实例.
  3. string 类不能操作多字节或者变长字节序列,因为 string 类的所有成员及迭代器会仍然按照字节操作,而不是实际编码的字符.

二、string 类的常用接口

  1. string 对象的常用构造
string()构造了一个空的string类对象(空字符串)
string(const char *str)使用c-字符串构造string类对象
string(size_t n, char c)构造出由n个c字符组成的string类对象
string(const string &s)拷贝构造(相当于将对象 s 复制一份)
string(const string &s, size_t n)使用对象 s 的前n个字符构造

使用示例:

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string s1;				// 构造空 string 对象s1
	string s2("hello");		// C风格字符串构造s2
	string s3(3, 'a');		// 3个字符'a'构造 s3对象
	string s4(s2);			// 拷贝构造
	string s5(s2, 3);		// 用s2中前3个字符构造s5

	return 0;
}

2.string 类对象的访问操作

char &operator [ ] (size_t pos)由 非const string 类对象调用,返回pos位置处字符(可修改)
const char &operator[ ]由const string 类对象调用,返回pos位置处字符(不可修改)
迭代器访问与其他容器操作相同(string类不常用)

示例:

void access_string()
{
	string s1("hello");
	const string s2(s1);	// 拷贝构造
	for (int i = 0; i < s1.size(); i++)
	{
		cout << s1[i];		// [] 访问
	}
	cout << endl;		// 换行
	s1[0] = 'a';		// 将对象s1首元素修改为 'a'
	//s2[0] = 'a';		// 该句错误,const 修饰s2,不可修改
	string::iterator it = s1.begin();	// 初始化迭代器
	for (; it < s1.end(); it++)
	{
		cout << *it;		// 此处迭代器可理解为指针,对指针解引用
	}
}

3.string 类对象的容量操作

size_t size() const返回字符串有效字符长度(数量)
size_t length() const返回字符串有效字符长度(与size()方法的底层实现完全相同)
size_t capacity() const返回对象空间大小
bool empty() const检测对象是否为空,为空返回true,否则返回false
void clear()清空字符串对象有效字符(不改变底层空间大小)
void resize(size_t n)将有效字符的个数修改为n个,多出的空间用0填充
void resize(size_t n, char c)将有效字符的个数修改为n个,多出的空间用字符’c’填充
void reserve(size_t res_arg = 0)为字符串直接预设 res_arg 大小的空间

示例:

void CapacityOperator()
{
	// string 类支持直接使用 cout cin 操作
	char arr[] = "abcd";
	string s1(arr);
	string s2(s1);
	cout << s1.size() << endl;
	cout << s1.length() << endl;
	cout << s1.capacity() << endl;
	// 此处clear后,只改变了s1的size,并没有改变它的capacity
	s1.clear();							
	cout << s1.size() << endl;
	cout << s1.capacity() << endl;	
	// 将s1的有效字符长度置为10个,多出位置用 '\0' 填充
	s1.resize(10);
	cout << s1 << endl;
	cout << s1.size() << endl;
	cout << s1.capacity() << endl;
	// 将s2的有效字符长度置为10个,多出位置用字符'c'填充
	s2.resize(10, 'c');
	cout << s2 << endl;
	cout << s2.size() << endl;
	cout << s2.capacity() << endl;
	// 为s2预设20个空间长度
	s2.reserve(20);
	cout << s2.capacity() << endl;
}
注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。 
reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于
string的底层空间总大小时,reserver不会改变容量大小

4.string 类对象的修改操作

void push_back(char c)在字符串后面插入一个字符c
string &append(const char *s)在字符串后面插入一个字符串
string &operator +=(const string &str)在字符串后面插入一个字符串
string &operator +=(const char* s)在字符串后面追加一个C风格字符串
string &operator +=(char c)在字符串后面追加一个字符c
const char* c_str() const返回C风格字符串
size_t find(char c, size_t pos = 0) const从字符串pos位置向后查找字符c,返回其在字符串中的位置
size_t rfind(char c, size_t pos = npos)从字符串pos位置向前查找字符c,返回其在字符串中的位置
string substr(size_t pos = 0, size_t n = npos)const在字符串中从pos位置开始,截取n个字符然后将其返回

示例:

void ModifyString()
{
	char arr[] = " 123asd";
	string s1("hello");
	s1.push_back('!');		// 在字符串后追加一个感叹号
	s1.append(arr);			// 在字符串后追加一个字符串
	s1 += " this";			// 在字符串后追加一个字符串
	s1 += "a";				// 在字符串后追加一个字符
	cout << s1 << endl;
	cout << s1.c_str() << endl;	// 以C风格字符串打印

	string s2("string.cpp");
	size_t pos = s2.find('.');		// 从前向后在字符串s2中查找'.'位置
	string s3(s2.substr(0,pos));	// 从字符串s2首元素开始向后截取到pos处
	cout << s3 << endl;
}

输出结果:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值