解法一:使用传值的方式
#include<stdio.h>
char Left_hand(char *arr, int k)
{
int right = 0;
int i = 0;
int len = strlen(arr);//求出字符串长度
char ret;
while(k)
{
ret = arr[0];
for(i = 0; i < len; i++)
{
if(4 == i)
{
arr[i] = ret;
}
if(i <= 3)
{
arr[i] = arr[i+1];
}
}
k--;
}
}
int main()
{
char arr[] = "ABCDE";
int k = 0;
scanf("%d",&k);
Left_hand(arr, k);
printf("%s\n",arr);
return 0;
}
解法二:是传址的方式
#include <stdio.h>
#include <assert.h>
void reverse_arr(char *src, int k)
{
int tmp;
assert(src != NULL);
while (k--)
{
char *cur = src; //创建临时变量,防止src被改变
tmp = *cur;
while (*(cur+1) != '\0')//用'/0'控制转换截至
{
*cur = *(cur+1);
cur ++;
}
*cur = tmp;
}
}
int main()
{
char arr[] = "ABCDE";
int k = 0;
scanf("%d",&k);
reverse_arr(arr, k);
printf("%s\n", arr);
return 0;
}
解法三:使用逆序函数
#include <stdio.h>
#include <assert.h>
void reverse(char *left, char *right)//创建一个翻转函数
{
assert ((left != NULL)&&(right != NULL));//断言,检查参数的有效性
while(left < right)
{
int tmp = *right;
*right = *left;
*left = tmp;
left ++;
right --;
}
}
void reverse_arr(char *src, int k)
{
int j = strlen(src); //跳过第一个元素
reverse(src,src+k-1); //翻转前fre个元素
reverse(src+k,src+j-1);//翻转fre后面元素
reverse(src,k+j-1); //整体翻转
}
int main()
{
char arr[] = "ABCDEFGH";
int fre = 0;
scanf("%d",&k);
reverse_arr(arr, k);
printf("%s\n", arr);
return 0;
}