string类常用方法
1.初始化
1.string对象初始化为指向的字符串
string str("hello");
2.创建一个包含 n 个元素的 string 对象,其中每个元素都被初始化为字符 c
string str(10,'a');
3.将一个 string 对象初始化为 string 对象 str(复制构造函数)
string str("abcde");
string str2(str);
4.创建一个默认的 string 对象,长度为 0
string str;
5.使用C语言风格字符串处理string对象
string str = "hello!";
2.方法函数
函数 | Value |
---|---|
push_back() | 一个 string 对象后面附加一个字符 |
getline() | 获取 string 输入getline(cin, str); |
string.back() | 获取或修改字符串最后一个字符str.back() = ‘e’; |
string.front() | 获取或修改字符串第一个字符 |
string.pop_back() | 删除字符串最后一个元素 |
string对象的比较可以直接使用关系运算符 | if(str1 == str2) |
string 对象的拼接 | string str3 = str1 + str2 |
str += “abcd”; | += 来在一个 string 对象后面附加一个 string 对象、字符以及 C 风格的字符串 |
str[2] | 下标访问,并不会检查是否越界 |
str.at(2) | at 方法访问,会检查是否越界 |
str.find() | 方法查找字符 |
string.insert() | 插入 |
string.swap() | 函数交换两个字符串str1.swap(str2); |
swap(str1,str2) | 函数交换两个字符串 |
150. 逆波兰表达式求值
1.思路
将数字压栈,遇到运算符弹出前面两个数字,将这两个数字通过运算符计算后的值压入栈
2.重点
1.==运算符用" "而不是’ '==因为数字存放的是string而不是char字符串类型
2.将string类型数字转换为整型 stoi()
3.将string里面存放的char类型数字转换为整型是s[i]-‘0’
3.代码
class Solution {
public:
//遇到符号弹出前面两个数字,通过运算符计算后,在压入栈
stack<int>input;
int evalRPN(vector<string>& tokens) {
for(int i=0;i<tokens.size();i++)
{
if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/")
{ int sum=0;
int ch1=input.top();
input.pop();
int ch2=input.top();
input.pop();
if(tokens[i]=="+")sum=ch1+ch2;
else if(tokens[i]=="-")sum=ch2-ch1;
else if(tokens[i]=="*")sum=ch1*ch2;
else if(tokens[i]=="/")sum=ch2/ch1;
input.push(sum);
}
else{
input.push(stoi(tokens[i]));
}
}
return input.top();
}
};
20. 有效的括号
1.思路
1.遍历string字符串遇到’(‘将‘)‘压入栈; 遇到’{‘将’}‘压入栈;遇到’[将’]‘压入栈;
2.遍历string字符串遇到‘)’;‘}’;']'弹出栈顶元素进行匹配,若不相等说明不匹配,返回false
3.最终判断栈里面元素是否为空,空则表示全部匹配上了
3.代码
class Solution {
public:
stack<char>input;
bool isValid(string s) {
for(int i=0;i<s.length();i++)
{
if(s[i]=='(')input.push(')');
if(s[i]=='{')input.push('}');
if(s[i]=='[')input.push(']');
if(s[i]==')'||s[i]=='}'||s[i]==']')
{
if(!input.empty())
{
if(input.top()==s[i]) input.pop();
else return false;
}
else return false;
}
}
if(input.empty())return true;
else return false;
}
};
1047. 删除字符串中的所有相邻重复项
1.思路
1.初始化一个栈,完成删除重复项,遍历字符串,与栈顶元素不相同的数字压栈,若遍历的值与栈顶元素相等,则弹出栈顶元素。
2.方法二:初始化一个字符串当成栈
2.重点
- reverse函数
函数功能:将序列[first,last)的元素在原容器中颠倒重排,包含在algorithm库中
例如:反转字符串
string str="abcd";
reverse(str.begin(),str.end());//str结果为dcba
交换vector容器中元素的顺序
vector<int> v = {5,4,3,2,1};
reverse(v.begin(),v.end());//v的值为1,2,3,4,5
2.string类型的用法,.back()获得字符串最后一个元素;.pop_back()删除字符串最后一个元素;push_back()字符串尾部添加元素
3.代码
1.方法一
class Solution {
public:
string removeDuplicates(string s) {
stack<char>input;
for(int i=0;i<s.size();i++)
{
if(input.empty())input.push(s[i]);
else
{
if(input.top()!=s[i]) input.push(s[i]);
else input.pop();
}
}
int count=input.size()-1;
s.clear();
while(!input.empty())
{
s+=input.top();//string的输入用法
input.pop();
}
reverse(s.begin(),s.end());
return s;
}
};
2.方法二
class Solution {
public:
string result;//直接用字符串当成栈
string removeDuplicates(string s) {
int size=s.length();
for(int i=0;i<size;i++)
{
if(!result.empty())
{
if(result.back()==s[i]) result.pop_back();
else result.push_back(s[i]);
}
else result.push_back(s[i]);
}
return result;
}
};