- 首先在c++中string是一个类,其头文件为 < string >
- string在标准空间std。
- 具体资料在官方链接。
- 主要参考官方文档和具体实例。
介绍
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
- 初始化
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;
- 迭代器(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) 请求字符串减小容量以适应其大小
- 元素访问
- [] 获取字符串字符
- 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!
- 编辑
- += 有以下四种定义
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
- 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
- push_back 将字符追加到字符串
- assign 将内容分配给字符串
- insert 插入字符串
- erase 从字符串中删除字符
- replace 替换字符串部分
- swap 交换字符串值
- pop_back (C++11)删除最后一个字符