string类型在c++中使用时,需要加上头文件
#include < string >
using std::string;
拷贝初始 string s = “value”;
直接初始化 string s(“value”);
单引号:字符 string s=“sbcdef”,其中每个字符的提取使用单引号char s[1]=‘b’
双引号:字符串 string s=[“2”, “1”, “+”, “3”, " * "],string s[1]=“1”
string:size_type() 类型????
反转字符串
使用前后指针,两边交换
class Solution {
public:
void reverseString(vector& s) {
int i=0,j=s.size()-1;
while(i<=j){
int tmp = s[i];
s[i++] = s[j];
s[j--] = tmp;
}
}
};
反转字符串II
class Solution {
public:
string reverseStr(string s, int k) {
//int i=0,j=k-1;
for(int i=0;i//表示每次开始的下标
int left=i,right = i+k-1;
if(right>s.size()-1) right = s.size()-1;//当出现右边下标大于字符串长度时,使得右下标表示字符串最右边的下标
while(right>=left){
swap(s[right--],s[left++]);
}
}
return s;
}
};
替换空格
string replaceSpace(string s) {
vectorvec_str;
string tmp;
for(int i=0;i
if(s[i]==' ') {
vec_str.push_back(tmp);
tmp.clear();
}
else tmp += s[i];
}
vec_str.push_back(tmp);
tmp.clear();
for(int i=0;i
tmp += vec_str[i];
tmp +="%20";
}
tmp += vec_str[vec_str.size()-1];
return tmp;
}
string replaceSpace(string s) {
int count=0;
for(int i=0;i
if(s[i]==' ') count++;
}
int oldsize = s.size();
int newsize = oldsize+2*count;
s.resize(newsize);
for(int i=newsize-1,j=oldsize-1;i>j;i--,j--){
if(s[j]!=' ') s[i]=s[j];
else{
s[i--]='0';
s[i--]='2';
s[i]='%';
}
}
return s;
}
反转单词
class Solution {
public:
void removeEmpty(string& s){
int slow=0, fast=0;
while(s.size() > 0 && fast< s.size() && s[fast]==' ') fast++;
for(;fast
if(fast-1>0&&s[fast]==s[fast-1]&&s[fast]==' '){
continue;
}
else s[slow++]=s[fast];
}
if(slow-1>0 && s[slow-1]==' ') s.resize(slow-1);
else s.resize(slow);
}
void reverse(string &s,int begin,int end){
while(begin
removeEmpty(s);
reverse(s,0,s.size()-1);
int left=0,right=0;
for(;right
if (s[right] == ' ') {
reverse(s, left, right - 1);
left = right + 1;
}
if(right == s.size() - 1) reverse(s, left, right);
}
return s;
}
};



