左旋字符串具体是指:“abcdef”->左旋两个字符即得到“cdefab”
Strlen函数是用来求解字符串的长度的函数,不包括‘\0’
直接上代码,后面包含了解释
#include<stdio.h>
#include<string.h>
void leftmove(char arr[], int k)
{
int len = strlen(arr);//得到字符串的长度
int i = 0;
for (i = 0; i < k; i++)//左旋几个元素就循环几次
{
char tep = *arr;//将第一个元素保存在tep中,防止丢失
int j = 0;
for (j = 0; j < len-1; j++)
{
*(arr+j) = *(arr+j+1);//从前向后将第二个元素赋给第一个元素
}
*(arr + len - 1) = tep;//将最后一个元素替换成第一个元素即可
}
}
int main()
{
char arr[] = "abcdefg";
int k = 0;
scanf_s("%d", &k);//输入需要左旋的元素个数
leftmove(arr, k);//调用左旋函数
printf("%s", arr);
return 0;
}
方法2:
将左旋2个字符"abcdef”转化为逆序“ab” 逆序“cdef” 逆序“abcdef”整体
#include<stdio.h>
#include<string.h>
void reverse(char* left, char* right)
{
while (left < right)
{
char tep = *left;
*left = *right;
*right = tep;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdefg";
int k = 0;
int len = strlen(arr);
scanf_s("%d", &k);
reverse(arr, arr + k - 1);//逆序左边
reverse(arr + k, arr + len - 1);//逆序右边
reverse(arr, arr + len - 1);//整体逆序
printf("%s", arr);
return 0;
}