实现一个函数,可以左右旋字符串中的k个字符

简介: 实现一个函数,可以左右旋字符串中的k个字符ABCD左旋一个字符得到BCDAABCD左旋两个字符的到CDABABCD右旋一个字符得到DABCABCD右旋两个字符的到CDAB

实现一个函数,可以左右旋字符串中的k个字符

ABCD左旋一个字符得到BCDA

ABCD左旋两个字符的到CDAB

ABCD右旋一个字符得到DABC

ABCD右旋两个字符的到CDAB

左旋:首先我们可以把第一元素放在一个临时变量中,然后将其他元素往前移动,然后把最后一个位置放入临时变量的值,这样我们我们就实现一个元素的左旋,重复这样的步骤,我们就可以得到左旋k次的字符串。

右旋:首先我们可以把第最后一个元素放在一个临时变量中,然后将其他元素往后移动,然后把第一个位置放入临时变量的值,这样我们我们就实现一个元素的右旋,重复这样的步骤,我们就可以得到右旋k次的字符串。

原理我们了解后我们来看下代码

1. #include<stdio.h>
2. #include<string.h>//运用strlen()函数指针要引用头文件#include<string.h>
3. void string_left_rotate(char* str,int k)
4. {
5.     int i=0;
6.     int n=strlen(str);//求字符串中的字符个数
7.     for(i=0;i<k;i++)
8.     {
9.         //每旋转一个字符
10.         char temp=*str;//临时变量
11.         //后面的元素往前挪动
12.         for(int j=0;j<n-1;j++)
13.         {
14.             *(str+j)=*(str+j+1);//后一个元素赋值给前一元素
15.         }
16.         *(str+n-1)=temp;//将临时变量赋值给最后一个元素
17.     }
18. }
19. void string_right_rotate(char* str,int k)
20. {
21.     int i=0;
22.     int n=strlen(str);//求字符串中的字符个数
23.     for(i=0;i<k;i++)
24.     {
25.         char temp=*(str+n-1);
26.         for(int j=n-1;j>0;j--)
27.         {
28.             *(str+j)=*(str+j-1);//后一个元素被赋值给前一元素
29.         }
30.         *str=temp;//将临时变量赋值给第一个元素
31.     }
32. }
33. int main()
34. {
35.     char arr[10]="ABCDEF";
36.     char brr[10]="ABCDEF";
37.     int k=3;//左右旋的次数
38.     string_left_rotate(arr,k);
39.     string_right_rotate(brr,k);
40.     printf("%s\n",arr);
41.     printf("%s\n",brr);
42.     return 0;
43. }

代码里有一些注释帮助大家理解。

相关的问题:

给出一个字符串brr[]看它是否是这个字符串arr[]经过左旋得到的,如果是,就给出经过多少次左旋得到的

其实我们可以在左旋的基础上,加一个比较的函数,函数库里面strcmp()就能帮助我们去实现比较的问题,了解原理之后,我们来看下代码

1. #include<stdio.h>
2. #include<string.h>//使用strcmp()函数,需要引用#include<string.h>
3. void string_left_rotate(char* str,int k)
4. {
5.     int i=0;
6.     int n=strlen(str);
7.     for(i=0;i<k;i++)
8.     {
9.         //每旋转一个字符
10.         char temp=*str;
11.         //后面的元素往前挪动
12.         for(int j=0;j<n-1;j++)
13.         {
14.             *(str+j)=*(str+j+1);
15.         }
16.         *(str+n-1)=temp;
17.     }
18. }
19. int main()
20. {
21.     char arr[10]="ABCDEF";
22.     char brr[10]="ABCDEF";
23.     int k=strlen(arr);//求出字符串中字符的个数
24.     while(k)
25.     {
26.         char arr[10]="ABCDEF";
27.         string_left_rotate(arr,k);
28.         printf("%s\n",arr);//更清楚了解左旋了多少次
29.         if(strcmp(arr,brr)==0)
30.         {
31.             printf("arr左旋%d次得到brr\n",k);
32.             break;//如果我们找到了,我们就可以跳出循环,减少循环次数
33.         }
34.         k--;
35.     }
36.     if(k==0)
37.     {
38.         printf("arr左旋得不到brr\n");
39.     }
40.     return 0;
41. }

看完之后希望大家能够完全掌握,也欢迎大家指出其中的不足,谢谢大家



相关文章
|
6月前
|
存储 C# C语言
字符串终止符
字符串终止符
512 2
|
6月前
|
存储 算法 编译器
|
6月前
|
存储 安全 C语言
c++字符串
c++字符串
58 1
|
6月前
|
C#
C#字符串
C#字符串
45 0
|
存储 编译器
C中的字符串
C中的字符串
94 0