目录
题目:
实现一个函数,可以左旋字符串中的k个字符
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
1. 解法一
按顺序一个接一个把第一个字母依次排到最后
#include <stdio.h>
#include <string.h>
void my_lea(char* arr, int k)
{
int len = strlen(arr);
int time = k % len;
for (int i = 0; i < time; i++)
{
int tem = arr[0];
int j = 0;
for (; j < len-1; j++)
{
arr[j] = arr[j + 1];
}
arr[len-1] = tem;
}
printf("%s\n", arr);
}
int main()
{
char arr[] = "abcdefg";
int k = 0;
scanf_s("%d", &k);
my_lea(arr, k);
return 0;
}
2. 解法二
利用库函数
strcpya() 和 strncat() 这两个库函数
头文件:
#include <string.h>
strcpy()----------->字符串拷贝
strncat()---------->字符串拼接
代码:
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "abcdefg";
char arr1[200] = { 0 };
int k = 0;
scanf_s("%d\n", &k);
k %= strlen(arr);
strcpy(arr1, arr + k);
strncat(arr1, arr, k);
printf("%s\n", arr1);
return 0;
}
3. 解法三
例:ABCDEF 用2举例
先将AB逆序,在将CDEF逆序
最后将BAFEDC整体逆序
代码:
#include <stdio.h>
#include <string.h>
void my_len(char* left, char* right)
{
while (left < right)
{
char ret = *left;
*left = *right;
*right = ret;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdefg";
int k = 0;
scanf("%d", &k);
int len = strlen(arr);
k %= len;
my_len(arr, arr + k - 1);
my_len(arr + k, arr + len - 1);
my_len(arr, arr + len - 1);
printf("%s", arr);
return 0;
}
4. 小结:
以上就是关于字符串左旋的内容了,具体还需宝子们去实践,如果觉得该博客对你有用的话,希望一键三连,点个关注不迷路,谢谢支持!