a[n],从0开始的
for(auto c : string)
string s2=s.substr(0,5) or (6)从下标6开始
s.append(args) 类似vector的push_back()
s.replace(range,args)在范围range内替换
其中args可以指str,pos,len或者n,c n个c 或者str等
swap(a,b)or a.swap(b);
‘/0’是字符串的结尾
reverse(,)可以换序
if(IP.find(’.’)==IP.npos)
给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。
如果不存在最后一个单词,请返回 0 。
说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。
从最后一个字母开始向前遍历,遇到第一个空格时结束。
需要注意的时末尾可能有很多的空格。
class Solution {
public:
int lengthOfLastWord(string s) {
int size=s.size();
int result =0;
while(size>0){
if(s[size-1]==' '&&result==0){
size=size-1;
}
else if( s[size-1]==' '){
return result;
}
else{
result++;
size--;
}
}
return result;
}
};
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
思路
找空格 或者 结束符
然后记住位置ptr及单词的左右标值,把前面的全部换位置
换完后判断是 ‘\0’ 还是 ’ ’ 分别给单词的左右标值赋值
class Solution {
public:
string reverseWords(string s) {
int num=s.size();
int left=0,right=0,ptr=0;
while(s[right]!='\0'){
while(s[right]!=' '&&s[right]!='\0'){
right++;
}
right=right-1;
ptr = right;
while(right>left){
swap(s[left],s[right]);
left++;
right--;
}
if(s[ptr+1]=='\0'){
right=ptr+1;
}
else{
left=ptr+2;
right=ptr+2;
}
}
return s;
}
实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串
思路
判断每个字符是不是在大写A到Z之间的
如果是就+32
注意要是想改变str for each必须是引用的。
class Solution {
public:
string toLowerCase(string str) {
for(auto &c:str){
if(c>='A'&&c<='Z')
c=c+32;
}
return str;
}
};
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
思路
双指针从屁股后面指到最前面。
但是 需要注意的是 姿符和数字差了’0’
class Solution {
public:
string addStrings(string num1, string num2) {
string t ;
int sum = 0, i = num1.size()-1, j = num2.size()-1;
while(i >= 0 || j >= 0 || sum)
{
if(i >= 0) sum += num1[i--] - '0';
if(j >= 0) sum += num2[j--] - '0';
t.push_back(sum%10 + '0');
sum /= 10;
}
reverse(t.begin(),t.end());
return t;
}
};
class Solution {
public:
string addStrings(string num1, string num2) {
int i = num1.length() - 1, j = num2.length() - 1, add = 0;
string ans = "";
while (i >= 0 || j >= 0 || add != 0) {
int x = i >= 0 ? num1[i] - '0' : 0;
int y = j >= 0 ? num2[j] - '0' : 0;
int result = x + y + add;
ans.push_back('0' + result % 10);
add = result / 10;
i -= 1;
j -= 1;
}
// 计算完以后的答案需要翻转过来
reverse(ans.begin(), ans.end());
return ans;
}
};
先取倒叙reverse(),然后用栈stack把单词倒叙了。
class Solution {
public:
string reverseWords(string s) {
if(s.empty())
return s;
string a;
int count = 0;
stack<char> mystack;
reverse(s.begin(), s.end());
for (auto c : s) {
if (c != ' ')
mystack.push(c);
if (c == ' '&&!mystack.empty()) {
while (!mystack.empty()) {
a.push_back(mystack.top());
mystack.pop();
}
a.push_back(' ');
}
}
while (!mystack.empty()) {
a.push_back(mystack.top());
mystack.pop();
}
if(a.size()>0)
if(a[a.size()-1]==' ')
a = a.substr(0, a.size() - 1);
return a;
}
};
呵呵开始做的时候没有考虑空字符串&空格字符串