给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。
void reverseK(string &s, int begin, int end){//反转函数从begin到end
while(begin<end){
char tmp = s[begin];
s[begin] = s[end ];
s[end] = tmp;
begin++;
end--;
}
}
string reverseStr(string s, int k) {
int len = s.size();
int a = len / (2 * k);//商
int y = len - a * 2 * k;//余数
for (int i = 0; i<a; i++){
reverseK(s, i * 2 * k, i * 2 * k+k-1);
}
if (y<k){
reverseK(s, a * 2 * k, a * 2 * k+y-1);
}
else{ //y>=k&&y<2k
reverseK(s, a * 2 * k, a * 2 * k + k - 1);
}
return s;
}
int main(){
string s = "abcdefg";
string a=reverseStr(s, 2);
cout << a << endl;
system("pause");
return 0;
}