首先我们对字符串的旋转做一个分析,以左旋为例,若将ABCD左旋一个字符则为DABC,以下图两两交换为一趟。
此时我们将A换到了字符串的末尾,再进行两次上述过程如下图
可知当第三趟结束后得到了左旋一个的结果,我们据此分析,当左旋三个字符时ABCD旋转为BCDA为第一趟结束时字符串,可以看出当我们左旋字符串n个字符时我们需要重复的趟数为字符串的长度减1次。设字符串长度为len则有:趟数=len-n
为达到题目要求,我们需要得到原字符串旋转后的结果与目标字符串进行比较,因此我们需要使用strcmp函数来判断字符串相等。而旋转字符的代码与冒泡函数类似,具体代码如下:
#include<stdio.h>
#include<string.h>
void left_turn(char* arr, size_t len, int n)
{
for (int i = 0; i < len - n;i++)//趟数
{
for (int j = 0; j < len -1;j++ )
{
char tep = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tep;
}
}
}
int main()
{
int k;
char arr1[] = "abcdefg";
char arr2[] = "fgabcde";
printf("原字符串为:");
printf("%s\n", arr1);
scanf_s("%d",&k);
left_turn(arr1,strlen(arr1),k);
printf("旋转后为:%s",arr1);
int ret=strcmp(arr1, arr2);
if (ret == 0)//当字符串相等时strcmp返回值为0
{
printf("是\n");
}
else
printf("不是\n");
return 0;
}