STL之string

目录

string常见的构造

迭代器

正向迭代器

使用方法

反向迭代器

const正向/反向迭代器

capacity接口

reserve 

 resize

string类对象的修改操作

 insert

头插

中间位置插入

erase

仅翻转字母

isalpha

 字符串中第一个唯一字符


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. 仅仅反转字母icon-default.png?t=N7T8https://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

C/C++库函数(isalpha)判断字符是否为字母_c++ 判断 全英文-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_42410605/article/details/102508916

 字符串中第一个唯一字符

387. 字符串中的第一个唯一字符icon-default.png?t=N7T8https://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++.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值