例:实现字符串左移函数,比如“abcdef"左移三位就得到”defabc"
三步翻转法:
先翻转前三个得到cbadef
从第四个字符开始翻转剩下的字符得到cbafed
再接着整体翻转 defabc
具体实现代码如下
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
void Reverse(char* left, char* right)
{
assert(left);
assert(right);
while (left < right)
{
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
void Reverse(char* left, char* right)
{
assert(left);
assert(right);
while (left < right)
{
int tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void Leftmove(char*pstr, size_t steps)
{
}
void Leftmove(char*pstr, size_t steps)
{
assert(pstr);
int len = strlen(pstr);
size_t step = steps%len;//表示转过n圈后
Reverse(pstr, pstr + step-1);
Reverse(pstr + step, pstr + len-1);
Reverse(pstr, pstr + len - 1);
}
int main()
{
int len = strlen(pstr);
size_t step = steps%len;//表示转过n圈后
Reverse(pstr, pstr + step-1);
Reverse(pstr + step, pstr + len-1);
Reverse(pstr, pstr + len - 1);
}
int main()
{
char arr[50] = { 0 };
size_t steps = 0;
scanf("%d %s", &steps,arr);
Leftmove(arr, steps);
printf("%s\n", arr);
system("pause");
return 0;
}
size_t steps = 0;
scanf("%d %s", &steps,arr);
Leftmove(arr, steps);
printf("%s\n", arr);
system("pause");
return 0;
}