字符串左旋的三种方法

编程入门 行业动态 更新时间:2024-10-22 16:19:16

字符串左旋的<a href=https://www.elefans.com/category/jswz/34/1770022.html style=三种方法"/>

字符串左旋的三种方法

一.题目:
要求左旋一个字符串,
例如将ABCDEF
左旋两次后得到CDEFAB

方法一:
1.思路:先把第一个元素拿出来,然后剩下的元素左移,最后把第一个元素放在最后的位置。
2.注意:k%=len,
代码如下:

#include <stdio.h>
#include <assert.h>
#include <string.h>
void Left_Move(char arr[], int k)
{int i = 0;						 int len = strlen(arr);k %= len;  // 有可能len大于字符串长度,余数就是左移的次数for (i = 0; i < k; i++){char tmp = arr[0];	 //把第一个元素拿出来,先赋值。int j = 0;for (j = 0; j < len-1; j++){arr[j] = arr[j + 1];	//左移}arr[len - 1] = tmp;	 //把第一个元素赋值到最后}
}int main()
{char arr[] = "abcdef";int k = 0;scanf("%d", &k);Left_Move(arr, k);printf("%s", arr);return 0;
}

方法二:逆序交换三次
1.思路:可以先将AB和CDE分别逆序得到BAEDC这个字符串,让后再将它们整体逆序得到CDEAB,即可得到结果。
代码如下:

#include <assert.h>
#include <string.h>
void reverse(char* left,char* right)
{assert(left && right);while (left < right){char tmp = *left;*left = *right;*right = tmp;left++;right--;}}
void Left_Move(char arr[], int k)
{int len = strlen(arr);k %= len;reverse(arr,arr+1);        //左reverse(arr+2,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", arr);return 0;
}

方法三:用库函数strcpy,strncat
1.思路:假设,我们需要将字符串ABCDE左旋,我们可以首先在其后面再接一个ABCDE字符串,
即ABCDEABCDE,然后我们需要左旋k次,就在后面的ABCDE里截取k个值,再将开头的k个值舍去即可。
代码如下:

#include <string.h>
void Left_Move(char arr[], int k)
{int len = strlen(arr);int pos = k % len;	//断开位置的下标char tmp[256] = { 0 };	//更准确的话可以选择malloc len + 1个字节的空间来做这个tmpstrcpy(tmp, arr + pos);//先将后面的全部拷过来strncat(tmp,arr,pos); //然后将前面几个接上strcpy(arr,tmp);     //最后拷回去
}
int main()
{char arr[] = "abcdef";int k = 0;scanf("%d", &k);Left_Move(arr, k);printf("%s", arr);return 0;
}

更多推荐

字符串左旋的三种方法

本文发布于:2024-02-24 21:43:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1696752.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:三种   字符串   左旋   方法

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!