最开始编写的版本:
#include <stdio.h>
#include <string.h>
void left_spin(char* p,int k)
{
int n = strlen(p);
int m = n;
while (k)
{
int i = 0;
char ret = *(p + n - 1);
*(p + n - 1) = *(p + i);
for (i = 0; i < m - 1; i++)
{
if (i != m - 2)
{
*(p + i) = *(p + i + 1);
}
else
*(p + i) = ret;
}
k--;
}
}
int main()
{
int k = 0;
scanf_s("%d", &k);
char arr[20] = "ABCD";
left_spin(arr,k);
printf("%s", arr);
return 0;
}
改进版
#include <stdio.h>
#include <string.h>
void left_spin(char* p, int n)
{
int ret = strlen(p);//ret计算字符串长度,方便得到字符串末位置的字符
int i = 0;
for (i = 0; i < n%ret; i++)//这个for循环表示左旋过程进行几次,n%ret的意思是,一个长6的字符串左旋8次和2次是一样的
{
int j = 0;
char a = *p;
for (j = 0; j < ret - 1; j++)
{
*(p + j) = *(p + j + 1);
}
*(p + ret - 1) = a;
}
}
int main()
{
int n = 0;
printf("输入你需要左旋的次数\n");
scanf_s("%d", &n);
char arr[10] = "abcdef";
left_spin(arr, n);
printf("%s", arr);
return 0;
}
改进版相当于前一版编写更简单,也更加方便理解。