//1: 写一个函数可以将一个字符串左旋K个字符(0<=k<=字符串长度) abcdef—2—cdefab
//将最前面的元素取出,剩下的向前移动,再将第一个放在最后,旋转k个,循环k次
#include<stdio.h>
#include<string.h>
void rorate(char *a,int k)
{
int len = strlen(a);
int i ,j;
k %= len ;
for(i = 0;i < k;i++)
{
char b = *a ;
for( j= 0;j < len - 1;j++)
{
*(a + j) = *(a + j +1);
}
* (a + len - 1) = b;
}
}
int main()
{
char str[] = {0};
int num = 0;
printf("please: \n");
scanf("%s",&str);
printf("please:num \n");
scanf("%s",&num);
rorate(str,num);
printf("%s\n",str);
return 0;
}
2:
循环几位,将前几位逆序,再将剩下元素也逆序,最后对数组进行整体逆序
#include<stdio.h>
#include<string.h>
void reverse(char *left, char *right)
{
while(left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
char* leftmove(char *brr,int k)
{
int len = strlen(brr);
reverse(brr,brr+k-1);
reverse(brr+k,brr+len-1);
reverse(brr,brr+len-1);
return brr;
}
int main()
{
char arr[] = "abcdef";//abcdef
leftmove(arr,2); //bacdef
printf("%s\n",arr); //bafedc
return 0; //cdefab
}
3:穷举,将每种情况可能性写出来,用空间换时间
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
void left_move(char *arr,int k)
{
int len = strlen(arr);
char *brr = (char*)malloc(2 * len + 1);
k %= len;//取余避免多次无用循环
/*char *brr = (char*)malloc(2 * len + 1);*///强转成字符型,malloc按字节申请内存空间+1为‘\0'
strcpy(brr,arr);//字符串拷贝
strcat(brr,arr);//字符串连接
strncpy(arr,brr + 2,6);
free(brr);//malloc用来动态申请内存空间,而free用来释放malloc申请的空间。
}
int main()
{
int k = 0;
char arr[] = "abcdef";
printf("请输入一个数:");
scanf_s("%d",&k);
left_move(arr,k);
printf("%s",arr);
system("pause");
return 0;
}