一.string类的定义:
Strings are objects that represent sequences of characters
简单粗暴的直译:
string是表示字符序列的对象
二.string类对象的常见构造
(1)string 变量名
创建了一个空的字符串
示例:
string str;
(2)string 变量名(已有的string类型的变量)
将存在的变量的内容拷贝到新创建的对象中
示例:
//拷贝str的内容给cpy
string cpy(str);
(3)string 变量名(字符串)
将字符串的内容拷贝到新创建的对象中
示例:
string str1("avc");
(4)string 变量名(已经存在的string对象,起始位置下标,要拷贝的数据的个数)
示例:
//从str1为1处,截取两个字符,拷贝到str2中
string str2(str1, 1, 2);
(5)string 变量名(字符串,要拷贝的元素个数)
示例:
//从字符串的前六个字符拷贝到str3
string str3("rjifjierjfiji", 6);
(6)string 变量名(要拷贝的个数,要拷贝的字符)
示例:
//将10个a组成的字符串拷贝到str4中
string str4(10, 'a');
(7)string 变量名=已经存在的string对象/字符串
示例:
//单参构造的隐式类型转换
string str5 = "wjeijei";
代码演示:
string str; //创建了一个空的字符串
string cpy(str); //拷贝str的内容给cpy
string str1("avc");
string str2(str1, 1, 2); //从str1下标为1处,截取两个字符
string str3("rjifjierjfiji", 6); //截取六个字符
string str4(10, 'a'); //创建10个a组成的字符串
string str5 = "wjeijei"; //单参构造的隐式类型转换
三.string类对象的迭代器(interator)
1.begin:
string对象的起始位置
使用string::iterator 来声明
示例:
string str = "12345";
//起始位置的迭代器
string::iterator it = str.begin();
2.end:
string对象的最后一个元素的下一个位置
使用string::iterator 来声明
示例:
//结束位置的迭代器
string::iterator it1 = str.end();
两个正向迭代器的代码演示:
//迭代器
void test()
{
string str = "12345";
string::iterator it = str.begin(); //起始位置的迭代器
string::iterator it1 = str.end(); //结束位置的迭代器
for (; it < it1; ++it) //正向移动,向后移动一个位置
{
//迭代器的解引用
cout << *it << " ";
*it = 'O'; //可以通过迭代器进行内容的修改
}
cout << endl;
for (it=str.begin(); it < it1; ++it)
{
//迭代器的解引用
cout << *it << " ";
}
cout << endl;
const string str1 = "I am lack of faculty";
//只读迭代器
string::const_iterator it2 = str1.begin();
while (it2 != str1.end())
{
cout << *it2 << " ";
//*it2 = 'x';//修改内容不支持
it2++;
}
cout << endl;
}
运行结果:
3.rbegin:
string对象的最后一个元素
使用string::reverse_iterator来声明
示例:
//rbegin:最后一个元素的位置
string::reverse_iterator it = str.rbegin();
4.rend:
string对象的第一个元素的前一个位置
使用string::reverse_iterator来声明
示例:
//rend:第一个元素的前一个位置
string::reverse_iterator it = str.rend();
两个反向迭代器的代码演示:
//反向迭代器
void test()
{
string str = "12345";
string::reverse_iterator it = str.rbegin(); //rbegin:最后一个元素的位置
while (it != str.rend()) //rend:第一个元素的前一个位置
{
cout << *it << " ";
//反向移动,向前移动一个位置
//可以进行内容的修改
*it = '6';
it++;
}
cout << endl;
for (it = str.rbegin(); it != str.rend(); ++it)
{
cout << *it << " ";
}
cout << endl;
//只读的反向迭代器
string str1 = "23456";
string::const_reverse_iterator it1 = str1.rbegin();
while (it1 != str1.rend())
{
cout << *it1 << " ";
//*it1 = '9'; //只读的反向迭代器不支持修改
it1++;
}
cout << endl;
//只读的crbegin,crend
string::const_reverse_iterator it2 = str1.crbegin();
while (it2 != str1.crend())
{
cout << *it2 << " ";
//*it2 = 'o'; //只读,不能修改
it2++;
}
cout << endl;
}
运行结果:
通过iterator实现的范围for代码演示:
//范围for:底层是通过iterator实现的
void test()
{
//范围for输出数组内容
int arr[] = { 1, 2, 3, 4, 5 };
for (const auto& e : arr)
{
cout << e << " ";
}
cout << endl;
//范围for修改数组内容
for(auto& e : arr)
{
e = 100;
}
for (const auto& e : arr)
{
cout << e << " ";
}
cout << endl;
string str = "abcde";
for (const auto& e : str)
{
cout << e << " ";
}
cout << endl;
for (auto& e : str)
{
e = 'x';
}
for (const auto& e : str)
{
cout << e << " ";
}
cout << endl;
}
运行结果: