【前言】大家好,我是Catzzz666,今天是程序员修炼之路的第五天,我们依旧需要努力与坚持来为打造我们的未来,让我们一起加油,今天主要讲解的是字符串的左旋,字符串左旋的完成有两种方法,这两种方法都很好理解,认真看完本篇文章,完全掌握字符串左旋绝对不是问题,接下来步入正文。
题目描述
关于字符串左旋,这里博主有两种思路供读者参考,读者具体使用哪种方法,要看读者对两种方法的理解是否到位,如果能够理解并运用两种方法完成的话,会进一步加深对知识的理解。
方法一(具体分为三个步骤)
//1.先试用临时变量将第一个字符存起来
//2.将后面的字符移到前面
//3.将临时变量的值放到最后
//循环进行上面的操作
看到这里,有很多小伙伴们并不是很理解,那么我们来画图讲解一些,具体是怎么实现的:
假设原来数组arr中有六个元素,abcdef;对数组进行操作:
代码实现
#include <stdio.h>
#include <string.h>
void left_move(char arr[], int k)
{
int len = strlen(arr);//求出字符串的长度为len,需要引头文件#include <string.h>
int j = 0;
for (j = 0; j < k % len; j++)//这里的k%len可以减少操作次数
{
int tmp = arr[0];//临时变量储存第一个字符
int i = 0;
for (i = 0; i < len - 1; i++)
{
arr[i] = arr[i + 1];//后面字符前移
}
arr[len - 1] = tmp;//储存的字符放到最后的位置
}
}
int main()
{
char arr[] = "abcdef";
int k = 0;
scanf("%d", &k);
left_move(arr, k);
printf("%s\n", arr);
return 0;
}
方法二(同样分为三个步骤)
//1.先逆序要左旋的字符串
//2.逆序剩下的字符串
//3.整体逆序
画图讲解:
代码实现
//逆序函数
void reverse(char* left, char* right)
{
//使用双指针完成逆序
while (left < right)
{
int tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void left_move(char arr[], int k)
{
int len = strlen(arr);
k %= len;//防止数组越界
reverse(arr, arr + k - 1);
reverse(arr + k, arr + len - 1);
reverse(arr, arr + len - 1);
}
int main()
{
char arr[] = "abcdef";
int k = 0;
scanf("%d", &k);
left_move(arr, k);
printf("%s\n", arr);
return 0;
}
【结语】字符串左旋讲到这里就结束了,如果在阅读过程中对以上内容有疑问可以直接私信博主,以梦为马,方能不负韶华。
让我们一起加油!