[c++]String类常用接口介绍01


String 是表示字符串的字符串类。在使用string类时,必须包含#include头文件以及using namespace std。

常用接口

Constructor

string(); //构造空的String类对象,即空字符串
string(const char* s); //用C-string来构造string类对象
string(size_t n, char c); //string类对象中包含n个字符c
string(const string &s); //拷贝构造函数
string构造的方法

String类对象的容量操作

size_t size() const; //返回字符串的有效长度
size_t length() const; //返回字符串的有效长度
size_t capacity() const; //返回底层容量大小,只扩容,不会改变有效元素个数
bool empty() const;//判断字符串是否为空串,为空返回True,不为空返回False
void clear(); //清空字符串,不清空底层容量大小

void reserve (size_t n = 0); //改变底层容量的大小
**/
reserve:

  1. 扩容函数–只是扩容,不会改变有效元素个数
  2. reserve(n): n只有比当前string类对象底层空间容量大的情况下才会真正扩容,而且一般情况下不会直接将容量给成n
  3. reserve(n): n小于当前string类对象底层空间时,reserve会忽略本次操作,除非n < 15
  4. reserve方法一般只会将容量扩大,而不会将空间缩小的,
  5. string类为了提高性能,在其类中管理一个长度为16个字符的数组
    /**
    在这里插入图片描述

void resize (size_t n); //有效字符数改变为n个,多出来的用0填充
void resize (size_t n, char c); //改变有效字符个数为n个,多余的用字符c填充
**/
resize(newsize, ch): 假设string类的有效元素个数为size,容量为capacity

  1. newsize < size: 只是将有效元素个数改变到newsize即可,不会缩小容量
  2. size<newsize<capacity: 直接将有效元素个数增加到newsize,多出的newsize-size个元素使用ch(0)进行填充
  3. newsize > capacity: 扩容-:申请新空间,拷贝元素,释放旧空间–将新元素个数增加到newsize个,多出的newsize-size个元素使用ch(0)进行填充
    /**
    在这里插入图片描述

vs-string的扩容方式是按照1.5倍的方式进行扩容的
注意:linux-SGI-STL string扩容的方式:是按照2倍的方式扩容的

按照两倍的方式扩容好呢还是按照1.5倍的方式扩容比较好?

String类对象的修改操作

void push_back (char c); //在字符串后面尾插字符c

string& append (const string& str);
string& append (const char* s);
string& append (size_t n, char c); //在字符串后面追加字符串

string& operator+= (const string& str);
string& operator+= (const char* s);
string& operator+= (char c); //在字符串后面追加字符串str

const char* c_str() const;//返回C格式字符串
size_t find (char c, size_t pos = 0) const; // 从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置

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 (const char* s, size_t pos, size_t n) const;
size_t rfind (char c, size_t pos = npos) const; //从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置

string substr (size_t pos = 0, size_t len = npos) const;//在str中从pos位置开始,截取n个字符,然后将其返回

string& insert (size_t pos, const string& str);
string& insert (size_t pos, const string& str, size_t subpos, size_t sublen);
string& insert (size_t pos, const char* s);
string& insert (size_t pos, const char* s, size_t n);
string& insert (size_t pos, size_t n, char c);
void insert (iterator p, size_t n, char c);
iterator insert (iterator p, char c);
template
void insert (iterator p, InputIterator first, InputIterator last)// 任意位置插入

string& erase (size_t pos = 0, size_t len = npos);
iterator erase (iterator p);
iterator erase (iterator first, iterator last);//移除任意字符串,有效长度将减小
void swap (string& str);//交换字符串

void Teststring()
{    
	string str;    
	str.push_back(' ');   // 在str后插入空格    
	str.append("Hello");  // 在str后追加一个字符"hello"    
	str += 'b';           // 在str后追加一个字符'b'       
	str += "it";          // 在str后追加一个字符串"it"
	cout<<str<<endl;    
	cout<<str.c_str()<<endl;   // 以C语言的方式打印字符串        
	// 获取file的后缀    
	string file1("string.cpp");    
	size_t pos = file.rfind('.');    
	string suffix(file.substr(pos, file.size()-pos));    
	cout << suffix << endl;       // npos是string里面的一个静态成员变量
	    // static const size_t npos = -1;        
	    // 取出url中的域名    
	string url("http://www.cplusplus.com/reference/string/string/find/");
    cout << url << endl;    
    size_t start = url.find("://");    
    if (start == string::npos)    
    {        
    	cout << "invalid url" << endl;        
    	return;    
    }    
    start += 3;    
    size_t finish = url.find('/', start);    
    string address = url.substr(start, finish - start);
	 cout << address << endl;        // 删除url的协议前缀    
	 pos = url.find("://");    
	 url.erase(0, pos+3);    
	 cout<<url<<endl; }

String类非成员函数

istream& operator>> (istream& is, string& str);//输入运算符重载
istream& operator<< (istream& is, string& str);//输出运算符重载
istream& getline (istream& is, string& str);//获取一行字符串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值