有趣的代码,继续走起!
目录
1.字符串的循环左移
将一个字符串向左循环移动i个位置,假设左移的位数小于字符串长度。例如,字符串"abcdefg"向左循环移动三个位置"defgabc"。这个算法有很多应用,例如在文本编辑器中移动行的操作,磁盘整理时交换两个不同大小的相邻内存块。
下面给大家介绍一个比较有意思的方法,具体步骤如下:
先将字符串中的前i个字符置逆,再将后n-i个字符置逆,最后将整个字符串置逆。例如,将字符串"abcdefg"循环左移三位,先将"abc"置逆为"cba",再将"defg"置逆为"gfed",最后将整个数组置逆。
算法实现如下:
设函数Converse实现将字符串ch循环左移i位。
1.n=字符串ch的长度;
2.将字符串ch的前i个字符置逆;
3.将字符串ch的后n-i个字符置逆;
4.将字符串ch的所有字符置逆;
设函数Reverse将字符串ch中从low到high的字符串置逆。
1.计算置逆区的长度len=high-low+1;
2.循环变量i从0~len/2-1,重复执行下述操作:
2.1将位置low+i的字符与位置high-i的字符交换;
2.2i++;
代码实现如下:
#include<stdio.h>
#include<string.h>
void Reverse(char*ch ,int low ,int high);
void Converse(char*ch,int i);
int main()
{
char ch[50];
int i = 0;
printf("请输入一个字符串:");
scanf("%s",ch);
printf("请输入循环左移的位数:");
scanf("%d",&i);
Converse(ch,i);
printf("循环左移%d位后的字符串位%s\n",i ,ch);
return 0;
}
void Converse(char*ch,int i)
{
int n=strlen(ch);
Reverse(ch,0,i-1);
Reverse(