这是关于一个普通双非本科大一学生的C++的学习记录贴
在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料
那么开启正题
今天分享的是关于string的题目,明天开始vector的学习
给定一个字符串?s
?,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序
这题利用string中的find函数来找到空格然后创建一个反转单词的子函数,注意最后一次交换找不到空格,find函数返回的是string::npos
class Solution {
public:
void reverse(string& s, int left, int right)
{
while (left < right)
{
swap(s[left],s[right]);
++left;
--right;
}
}
string reverseWords(string s)
{
int begin = 0;
int end = s.size() - 1;
while (begin < end)
{
int right = s.find(' ', begin + 1);
if (right == string::npos)
{
reverse(s, begin, end);
break;
}
reverse(s, begin, right - 1);
begin = right + 1;
}
return s;
}
};
这是ac代码
给定一个字符串?s
?和一个整数?k
,从字符串开头算起,每计数至?2k
?个字符,就反转这?2k
?字符中的前?k
?个字符。
k
?个,则将剩余字符全部反转。2k
?但大于或等于?k
?个,则反转前?k
?个字符,其余字符保持原样?首先创建一个反转字符串的子函数,再到字符串上面利用双指针控制迭代,要注意边缘情况的控制
class Solution {
public:
void reverse(string& s,int left,int right)
{
while(left < right)
{
char tmp = s[left];
s[left] = s[right];
s[right] = tmp;
++left;
--right;
}
}
string reverseStr(string s, int k)
{
int begin = 0;
int end = s.size() - 1;
while(begin < end)
{
int r1 = begin + k;
if(r1 > end)
{
reverse(s,begin,end);
break;
}
int r2 = begin + 2 * k;
reverse(s,begin,r1 - 1);
begin = r2;
}
return s;
}
};
?
今天的博客就到这里了,后续内容明天分享,最近因为考试周原因不能更新太多内容,等考试周结束了再"快马加鞭"
新手第一次写博客,有不对的位置希望大佬们能够指出,也谢谢大家能看到这里,让我们一起学习进步吧!!!