一、string类型定义,初始化
如图,s1,s2,s3均为定义方法,但在输入字符串时若有空格不能直接cin,否则后面内容不会读入这里我们使用getline去读
这里可以看见getline的功能
二、字符串的拼接
比如这里我们想把s1和s2拼接
string s1 = "hello";
string s2("world");
cout << s1 + s2 << endl;
三、遍历string
1.普通for循环
string s1 = "abcdefg";
for (size_t i = 0; i < s1.size(); i++)
cout << s1[i] << " ";
cout << endl;
for (size_t i = 0; i < s1.size(); i++)
s1[i]++;
cout << s1;
2.迭代器遍历
string s1 = "abcdefg";
string::iterator it = s1.begin();
while (it != s1.end())
{
//读
cout << *it << " ";
++it;
}
cout << endl;
it = s1.begin();
while (it != s1.end())
{
//写
*it = 'a';
++it;
}
cout << s1;
3.反向迭代器遍历
string s1 = "abcdefg";
string::reverse_iterator it = s1.rbegin();//此类型也可以换成auto
while (it != s1.rend())
{
cout << *it << " ";
++it;
}
cout << endl;
4.范围for遍历
string s1 = "abcdefg";
for (auto ch : s1)
{
//读
cout << ch << " ";
}
cout << endl;
for (auto ch : s1)
{
//写
ch++;
cout << ch << " ";
}
5.四种迭代器
正向迭代器 const
反向迭代器 非const
正向迭代器:string::iterator it(指针)
反向迭代器:string::reverse_iterator rit(指针)
四、取字符
string s1("hello,world");
string s2(s1);
cout << "s2:" << s2 << endl;
string s3(s1, 6, 5);
cout << "s3:" << s3 << endl;
string s4(s1, 5);
cout << "s4:" << s4 << endl;
仔细观察s4,发现比s3少传了个参数,那是因为那个参数有一个缺省值npos=-1,但他是无符号整形,所以也就是42亿多,这不是超范围了吗?但是祖师爷明显想到了这点,当s.size()小于npos的时候,就会取到s结束,但想取到最后一个,还可以采用下面方法
string s5(s,6,s.size()-6);
五、有关string的函数
//1.s.size()//求s的长度
//2.s.clear()//清理数据,但不主动释放空间
//3.s.capacity()//扩容
//4.reverse 反转
//5.reserve 保留
s.reserve(100);//保留100个空间,vs可能会比100多一点,g++会给100
//6.resize size大小
//关于resize有下面声明方式
resize(size_t n);
resize(size_t n,char ch);
//若n>s.capacity(),那就是扩容
//若n>s.size()&&n<s.capacity(),那就是插入
//若n<s.size(),那就是删除
//7.push_back();尾插
//8.(operator+=)+= 拼接
//9.assign 赋值,可覆盖原来内容
//10.insert 插入
//11.erase 删除
//12.find,rfind 从前面,后面查找
//13.substr 分段
string s = "hello";
cout << s.find('h') << endl;
cout << s.rfind('e') << endl;
string s1;
s1 = s.substr(0, 2);
cout << s1;