C++中的string类全面分析

  1. 首先在c++中string是一个类,其头文件为 < string >
  2. string在标准空间std。
  3. 具体资料在官方链接
  4. 主要参考官方文档和具体实例。

介绍

strings are objects that represent of characters.

string的定义和初始化

1.定义
string类可先不初始化,先定义。std::string str1;
当string未初始化时,其大小为0,因为string大小是动态的,可随着string实例变化而变化大小。

string str1;
cout << "string length is :" << str1.size() << endl;

执行结果为:

string length is :0
  1. 初始化
    2.1 直接初始化(实际上是运算符重载)
string str1;
str1 = "abc";

或者

string str1("abc");

2.2 赋值初始化
2.2.1 调用复制构造函数方法

string str1("abc");
	string str2(str1);
	cout << "str2 的值是"<<str2 << endl;
	cout << "str1 的值是" << str1 << endl;

结果为:

str2 的值是abc
str1 的值是abc

2.2.2 按要求复制来初始化

string str1("abcdefghijk");
	string str2(str1,6);
	cout << "str2 的值是"<<str2 << endl;
	cout << "str1 的值是" << str1 << endl;

结果为:

str2 的值是ghijk
str1 的值是abcdefghijk

将前6个字符赋值给string,还有很多按条件的赋值,不再累述。在官方文档有这几种构造函数:

default (1)	string();

copy (2)	string (const string& str);

substring (3)	string (const string& str, size_t pos, size_t len = npos);

from c-string (4)	string (const char* s);

from buffer (5)	string (const char* s, size_t n);

fill (6)	string (size_t n, char c);

range (7)	template <class InputIterator>
  string  (InputIterator first, InputIterator last);

initializer list (8)	string (initializer_list<char> il);

move (9)	string (string&& str) noexcept;
  1. 迭代器(Iterators)
    3.1 begin end
string str1("abcdefghijk");
cout << "str1 的值是" << str1 << endl;
for (std::string::iterator it = str1.begin(); it < str1.end(); it++)
{
	cout << *it << '\t';
}

结果为:

str1 的值是abcdefghijk
a       b       c       d       e       f       g       h       i       j       k

3.2 rbegin rend (反向迭代器)

	string str1("abcdefghijk");
	cout << "str1 的值是" << str1 << endl;
	for (string::reverse_iterator r_it = str1.rbegin(); r_it < str1.rend(); ++r_it)
	{
		cout << *r_it << '\t';
	}

结果为:

str1 的值是abcdefghijk
k       j       i       h       g       f       e       d       c       b       a

3.3 cbegin cend(const iterator 指的是迭代器可更改,但不可更改所指向内容)(C++11新增)

for (string::const_iterator c_it = str1.cbegin(); c_it < str1.cend(); c_it++)
	{
		cout << *c_it << '\t';
		//*c_it='a';  ERROR  因为其不可修改
	}

结果为:

a       b       c       d       e       f       g       h       i       j       k

3.4 crbegin crend(const reverse iterator)(C++11新增)

  • Capacity(大小和存储问题)
    在表示string长度问题上有以下几种
  • size 返回string长度
  • length 返回string长度
  • max_size 返回string的最大长度
  • resize 调整string大小
  • capacity 返回当前为字符串分配的存储空间的大小,以字节表示。
  • reserve 请求将字符串容量调整到计划的大小更改为最多n个字符的长度。
  • clear 擦除字符串的内容,该字符串变为空字符串(长度为0个字符)。
  • empty 返回字符串是否为空(即其长度是否为0)。
  • shrink_to_fit(C++11) 请求字符串减小容量以适应其大小
  1. 元素访问
  • [] 获取字符串字符
  • at 获取字符串字符
  • back (C++11) 访问最后一个字符
  • front(C++11) 访问第一个字符
string str1("abcdefghijk");

	for (int i = 0; i < str1.length(); i++)
		cout << str1.at(i) << '\t';
	cout << endl;
	cout << str1.back()<< endl;
	str1.back() = '!';//在末尾增加一个字符
	cout << str1.back()<< endl;
	cout << str1.front()<< endl ;
	str1.front() = 'B';//在开头增加一个字符
	cout << str1.front() << endl;
	cout << str1 << endl;

结果为:

a       b       c       d       e       f       g       h       i       j       k
k
!
a
B
Bbcdefghij!
  1. 编辑
  2. += 有以下四种定义
string (1)	 string& operator+= (const string& str);

c-string (2)	 string& operator+= (const char* s);

character (3)	string& operator+= (char c);

initializer list (4)	string& operator+= (initializer_list<char> il);

string str1("abcdefghijk");
	string str2("pp");
	str1 += 'A';
	char a = 'q';
	str1 += a;
	cout << str1 << endl;
	str1 += str2;
	cout << str1 << endl;

结果为:

abcdefghijkAq
abcdefghijkAqpp
  1. append(常用几种定义)
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);

string str1("abcdefghijk");
	string str2("ABCDEFG");
	char a[10] = "abcdef";
	cout << str1 << endl;
	str1.append(str2);
	cout << str1 << endl;
	str1.append(str2, 2, 4);//在后面添加str2[2]以及后面4个元素
	cout << str1 << endl;
	str1.append(a, 3);//在str1后添加三个字符
	cout << str1 << endl;
	str1.append(3, 'a');//后面加三个a
	cout << str1 << endl;

结果为:

abcdefghijk
abcdefghijkABCDEFG
abcdefghijkABCDEFGCDEF
abcdefghijkABCDEFGCDEFabc
abcdefghijkABCDEFGCDEFabcaaa
  1. push_back 将字符追加到字符串
  2. assign 将内容分配给字符串
  3. insert 插入字符串
  4. erase 从字符串中删除字符
  5. replace 替换字符串部分
  6. swap 交换字符串值
  7. pop_back (C++11)删除最后一个字符
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值