STL初识——string类的那点事
Posted 風的尾巴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL初识——string类的那点事相关的知识,希望对你有一定的参考价值。
cplusplus,非官网,但布局比较美观,支持到C++11
cppreference,官网,可支持到最新标准,但布局不太美观
文档一般结构布局为:接口函数声明——>接口函数的功能、参数以及返回值的说明——>使用样例代码
那让我们正式进入string类的学习吧!
首先,在STL中的string类有9个构造函数,此处以最常用的3个和大家一起来学习
- string类的无参构造函数
- string类的有参构造函数
- string类的拷贝构造函数
string s1; //无参构造
string s2("come on"); //带参的构造
string s3(s2) //拷贝构造
string s4="come on";
s1 = "happy";
//等价于带参数的构造,string支持char类型字符串的构造
运行结果
拓展小知识:
1.wchar_t 为宽字节,2byte 其能够更好的表示unicode等编码,其对应STL中的wsting,而常见的为char对应的sting
2.ascll码其实是早起针对英文的编码,而后来为了显示各个国家的语言文字,便引入了unicode,utf-8,uft-16,uft-32等编码,
gbk即是专门针对中文的编码方式。
接下来,让我们通过一道简单的练习再进一步理解一下吧!
原题链接
解题思路:
方法一,下标+[ ]遍历并+计数排序思想
class Solution
public:
int firstUniqChar(string s)
int count[26]=0;
for(size_t i=0;i<s.size();++i)
count[s[i]-'a']++;
for(size_t i=0;i<s.size();++i)
if(count[s[i]-'a']==1)
return i;
return -1;
;
方法二,迭代器遍历+计数排序思想
class Solution
public:
int firstUniqChar(string s)
int count[26]=0;
string::iterator it=s.begin();
while(it!=s.end())
count[*it-'a']++;
++it;
for(size_t i=0;i<s.size();++i)
if(count[s[i]-'a']==1)
return i;
return -1;
;
方法三,范围for遍历+计数排序思想
class Solution
public:
int firstUniqChar(string s)
int count[26]=0;
for(auto x: s)
count[x-'a']++;
for(size_t i=0;i<s.size();++i)
if(count[s[i]-'a']==1)
return i;
return -1;
;
总结一下,其实三种方法唯一的区别就是三种的遍历方法不同,思路的中都是计数排序的思想。
string.erase()用法
- string.erase(pos,n)删除从pos开始的n个字符(pos是string类型的迭代器)
默认pos=0,n=nps=-1 - string.erase(pos)删除pos处的字符
- string.erase(first,last)删除从first到last中间的字符
string s1;
s1.erase(0,1);
s1.erase(); //为全部删完
尾插
1.push_back(’ ')插入单个字符
2.append(" ")插入字符串,也可进行拷贝构造
3.直接使用+=,可直接插入单个字符,也可以插入字符串
string s1;
s1.push_back('i');
s1.append("world");
string s2;
s2.append(s1);
s1+="rh"; //其实底层调用的还是前两个接口
s1+='l';
头插或中间插入
string.insert()
注意不支持插入单个字符,但可以插入一个字符的字符串
string s1;
s1.insert(0,"x"); //头插
s1,insert(3,"yyyy"); //中间插
虽可以进行头插和中间插,但尽量少用insert,因为底层实现的是数组,头插或者中间插入是需要挪动数据的。
以上是关于STL初识——string类的那点事的主要内容,如果未能解决你的问题,请参考以下文章