string
初始化
string s1; // 默认初始化
string s2 = s1;// 拷贝初始化
string s3(s1); // 直接初始化,string s2 = s1 等价
string s4(“hello string”);//直接初始化,s4 是字面值常量的副本
string s5 = “hello string”;//拷贝初始化, string s4(“hello string”) 等价
string s6(10, ‘c’); //初始化由连续10个字符c组成的串
操作
s.empty() s为空返回true,否则返回false
s.size() 返回s中的字符个数
getline(cin,s) 读取一行文字,读取到换行符为止(也包括换行符) ,s字符串不包含换行符
=, assign() // 赋以新值
swap() // 交换两个字符串的內容
+=, append(), push_back() // 在尾部添加字符
insert() // 插入字符
erase() // 删除字符
clear() // 删除全部字符
replace() // 替换字符
+ // 串联字符串
==, !=, <, <=, >, >=, compare() // 比较字符串
size(), length() // 返回字符数量
max_size() // 返回字符的可能最大个数
empty() // 判断字符串是否为空
capacity() // 返回重新分配之前的字符容量
reserve() // 保留一定量内存以容纳一定数量的字符
[ ], at() // 返回某一位置的字符
>>, getline() // 输入
<< // 输出
copy() // 拷贝
c_str() // 将内容以C_string返回
data() // 返回一个非null终止的c字符数组
substr() // 返回某个子字符串
查找函数(find, rfind…)
begin(), end() // 提供类似STL的迭代器支持
rbegin(), rend() // 逆向迭代器
get_allocator() // 返回配置器
#include<iostream>
#include <string>
using std::string;
using std::cout;
using std::cin;
using std::endl;
int main()
{
// 初始化
string s1; // 默认初始化
string s2 = s1;// 拷贝初始化
string s3(s1); // 直接初始化,string s2 = s1 等价
string s4("hello string");//直接初始化,s4 是字面值常量的副本
string s5 = "hello string";//拷贝初始化, string s4("hello string") 等价
string s6(10, 'c'); // 初始化由连续10个字符c组成的串
cout << "s1=" << s1 << " s2=" << s2 << " s3=" << s3 << " s4="<<s4 << " s5=" << s5 << " s6=" << s6 << endl;
// string 对象上的操作
if (s1.empty()) // s1为空返回true,否则返回false
{
cout << "s1 is empty" << endl;
}
if (!s2.size())// 返回s2中的字符个数
{
cout << "s2 is empty" << endl;
}
// 输入 s1 s2 s3 => s1 = "s1" s2 = " s2 s3"
cin >> s1; // 读取一行文字,但是只把前面的文字
cout << s1 << endl; //
std::getline(cin,s2); //读取一行文字,读取到换行符为止(也包括换行符)
cout << s2 << endl;
}
string::size_type
从逻辑上讲,size()成员函数应该似乎返回整型数值,但事实上,size操作返回是string::size_type类型的值。string类类型和其他许多库类型都定义了一些配套类型(companion type)。通过这些配套类型,库函数的使用就与机器无关(machine-independent)。size_type就是这些配套类型中的一种。它定义为与unsigned型(unsigned int获unsigned long)具有相同含义,而且保证足够大的能够存储任意的string对象的长度。string::size_type它在不同的机器上,长度是可以不同的,并非固定的长度。但只要你使用了这个类型,就使得你的程序适合这个机器。与实际机器匹配。string对象的索引也应为size_type类型。
字面值和string对象相加
当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符(+)的两侧的运算对象至少有一个是string。
string s1=“abc”;
string s2=s1+"!" ; //正确
string s3=“love”+“you” ; //错误,两个运算对象都不是string
string s4=s1+","+“efg” ; //正确,根据它的工作原理和连续输入连续输出,首先得到 s1+"," 结果是string对象,它作为第二个加法运算符的左侧运算对象,满足规则
string s5=“efg”+","+s1; //错误,字面值不能直接相加
注意:C++语言中的字符串字面值并不是标准库类型string对象。字符串字面值是常量,存放在常量存储区。
可以使用范围for循环
下标运算符
不幸的是,这种通过下标访问不存在的元素的行为非常常见,而且会产生很严重的后果。所谓的缓冲区溢出指的就是这类错误,这也是导致PC及其他设备上应用程序出现安全问题的一个重要原因。