目录
string常见的构造
string s1("hello");
string s2(s1, 1, 2);
string s3(s1, 1, string::npos);
cout << s2 << endl;
cout << s3 << endl;
迭代器
正向迭代器
string::iterator;
iterator在string的类域中
使用方法
string::iterator it = s1.begin();
while (it != s1.end())
{
cout << *it << endl;
it++;
}
反向迭代器
string::reverse_iterator rit = s1.rbegin();
while (rit != s1.rend())
{
cout << *rit << " ";
rit++;
}
const正向/反向迭代器
int String2int(const string& num)
{
string::const_iterator cit = num.begin();
int count = 0;
while (cit != num.end())
{
count = count * 10 + *cit - '0';
++cit;
}
return count;
}
capacity接口
s1.clear();
大小减为0但capacity任然存在。
reserve
往往会多开一些 最后一个位置放\0
resize
会改变size和capacity,超出的位置用\0
s.resize(100,'x');
也可以自定义
string类对象的修改操作
+=相比push_back和append用起来更舒服。
insert
头插
s.insert(s.begin(),'x');
中间位置插入
s.insert(2,"2");
erase
s.erase(2,3);
从第二个位置开始删除三个字符。
仅翻转字母
917. 仅仅反转字母https://leetcode.cn/problems/reverse-only-letters/
class Solution {
public:
string reverseOnlyLetters(string s) {
string::iterator begin=s.begin(),end=s.end();
while(begin<end)
{
while(begin<end&&!isalpha(*begin))
begin++;
while(begin<end&&!isalpha(*end))
end--;
swap(*begin,*end);
++begin,--end;
}
return s;
}
};
思考:这段代码用数组咋实现?
isalpha
字符串中第一个唯一字符
387. 字符串中的第一个唯一字符https://leetcode.cn/problems/first-unique-character-in-a-string/
class Solution {
public:
int firstUniqChar(string s) {
vector<int> count(26,0);
for(auto ch:s)
count[ch-'a']++;
for(int i=0;i<s.size();i++)
{
if(count[s[i]-'a']==1)
return i;
}
return -1;
}
};
尝试vector的构造方法有c的定义方式过度到c++.
标签:count,begin,string,iterator,STL,s1,迭代 From: https://blog.csdn.net/2301_77479435/article/details/141823138