C++ string常用函数

1. STL 简介

什么是 STL

STL 是 C++ 标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

STL 六大组件

2. 标准库中的 string 类

了解 string 类

 string 是表示字符串的字符串类,该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作 string 的常规操作。string 在底层实际是:basic_string 模板类的别名,typedef basic_string<char> string。string 不能操作多字节或者变长字符的序列。

3. string 常用函数

string 它在 #include <string> 中,它有七个构造函数

    string();
	//构造一个空的

	string(const string & str);
	//拷贝构造

	string(const string & str, size_t pos, size_t len = npos);
	//拷贝 str 的一部分,从 pos 位置开始拷贝 len 个字符。如果 len 远超后面的长度就直接拷到 str 的      结尾。
	//npos 是它里面的一个静态成员标量给的值是 -1 (static const size_t npos = -1)也就是一个号整型的最大值。
	//所以这边 npos 的寓意就是取到结尾

	string(const char* s);
	//字符串初始化

	string(const char* s, size_t n);
	//用字符串的前 n 个去初始化对象

	string(size_t n, char c);
	//用 n 个字符去初始化

	template <class InputIterator>  
	string(InputIterator first, InputIterator last);
	//迭代器区间初始化

 operator[] 

[] 可以让一个类像数组一样去访问,并且它实现了两个重载版本,一个普通的和一个 const 的。

char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;
string str("Hello world");
cout << str[0] << endl;
str[0] = 'x';
cout << str[0] << endl;

迭代器

begin() 会返回第一个位置的迭代器,迭代器是一个像指针一样的东西,它有可能是指针也有可能不是,但是它的用法像指针。它是在 string 这个类里面有一个内嵌类型,然后这个类型定义一个对象,这个对象名字可以随便取一般都喜欢叫 it 。

string s("Hello world");
string::iterator it = s.begin();  //s.begin() 会返回第一个位置的迭代器
while (it != s.end())  //end 是最后一个位置的下一个位置
{
	cout << *it << " ";  //像指针一样的东西
	++it;
}
cout << endl;
//反向迭代器
string::reverse_iterator rit = s.rbegin();
while (rit != s.rend())
{
	cout << *it << "";  //
	++it;
}

插入字符

push_back 只能插入字符,append 可以插入字符串。

void push_back (char c);

//

string& append (const string& str);

string& append (const string& str, size_t subpos, size_t sublen);
	
string& append (const char* s);
	
string& append (const char* s, size_t n);
	
string& append (size_t n, char c);
	
template <class InputIterator>   
string& append (InputIterator first, InputIterator last);
string s("hello world");

s.push_back(' ');
s.push_back('-');

s.append("world");

同时它还重载了 += 

string& operator+= (const string& str);
	
string& operator+= (const char* s);
	
string& operator+= (char c);
string s("hello world");
string str("!!!");

s += '@';
s += str;
s += "???";

容量大小

string s("hello world");
	
cout << s.capacity() << endl;

申请空间

比如说知道要用 1000 个字符可以提前 reserve 1000

string s;
s.reserve(1000);

resize 是开空间 + 初始化

string s;
s.resize(1000, 'x');

清掉所有数据

string s;
s.clear();

插入

可以给下标也可以给迭代器

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 <class InputIterator>
void insert (iterator p, InputIterator first, InputIterator last);
string s("insert");
s.insert(s.end(), ' %');

删除

string& erase (size_t pos = 0, size_t len = npos);
iterator erase (iterator p);
iterator erase (iterator first, iterator last);
string s(" insert ");
s.erase(0, 1);
s.erase(s.end());

替换

replace 它可以把 pos 位置开始的 len 个字符直接替换成 str 对象或者 str 对象的一部分或者 char* 等

string& replace (size_t pos,  size_t len,  const string& str);
string& replace (iterator i1, iterator i2, const string& str);
	
string& replace (size_t pos,  size_t len,  const string& str,size_t subpos, size_t sublen);
	
string& replace (size_t pos,  size_t len,  const char* s);
string& replace (iterator i1, iterator i2, const char* s);

string& replace (size_t pos,  size_t len,  const char* s, size_t n);
string& replace (iterator i1, iterator i2, const char* s, size_t n);
	
string& replace (size_t pos,  size_t len,  size_t n, char c);
string& replace (iterator i1, iterator i2, size_t n, char c);
	
template <class InputIterator>
string& replace (iterator i1, iterator i2,InputIterator first, InputIterator last);

 c_str

它是用来兼容 C 的接口,它的返回值是一个 const char* 。c_str 是以 \0 为结尾的

const char* c_str() const;

查找

从 pos 位置开始找,返回第一个匹配的位置,没找到就返回 npos 

size_t find (const string& str, size_t pos = 0) const;
	
size_t find (const char* s, size_t pos = 0) const;
	
size_t find (const char* s, size_t pos, size_t n) const;
	
size_t find (char c, size_t pos = 0) const;

取当前 string 的一个字串

从 pos 位置取 len 个字符

string substr (size_t pos = 0, size_t len = npos) const;

getline

getline 第一个参数就是传 cin 再传字符串,还可以传一个分隔符(用其它字符表示换行)。

istream& getline (istream& is, string& str, char delim);

istream& getline (istream& is, string& str);
string s;
getline(cin, s);

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值