第一种方法:三步旋转法
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
void swap(char* left, char* right) //反转两指针间的字符串
{
assert(left);
assert(right);
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void server(char* dest, size_t count)
{
assert(dest);
int len = strlen(dest);
swap(dest, dest + len - count - 1); //由“abcdefg”变成“edcbafg”
swap(dest + len - count, dest + len - 1); //由“edcbafg”变成“edcbagf”
swap(dest, dest + len - 1); //由“edcbagf”变成“fgabcde”
}
int main()
{
char arr[] = "abcdefg";
size_t count = 2;
server(arr, count);
printf("%s", arr);
system("pause");
}
第二种方法:移项法
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
void server(char *str, int len) //移项法
{
assert(str);
int i = 0;
int num = 0;
char temp = 0;
for (i = 0; i < len; i++)
{
num = strlen(str);
num--;
temp = str[num];
while (num>0)
{
str[num] = str[num - 1];
num--;
}
str[num] = temp;
}
}
int main()
{
char arr[] = "abcdefgh";
server(arr, 2);
printf("%s\n", arr);
system("pause");
return 0;
}
仅提供方法,代码大家自己调试,看具体的过程。如有建议,请指点。