实现一个函数,可以左右旋字符串中的k个字符

实现一个函数,可以左右旋字符串中的k个字符

ABCD左旋一个字符得到BCDA

ABCD左旋两个字符的到CDAB

ABCD右旋一个字符得到DABC

ABCD右旋两个字符的到CDAB

左旋:首先我们可以把第一元素放在一个临时变量中,然后将其他元素往前移动,然后把最后一个位置放入临时变量的值,这样我们我们就实现一个元素的左旋,重复这样的步骤,我们就可以得到左旋k次的字符串。

右旋:首先我们可以把第最后一个元素放在一个临时变量中,然后将其他元素往后移动,然后把第一个位置放入临时变量的值,这样我们我们就实现一个元素的右旋,重复这样的步骤,我们就可以得到右旋k次的字符串。

原理我们了解后我们来看下代码

#include<stdio.h>
#include<string.h>//运用strlen()函数指针要引用头文件#include<string.h>
void string_left_rotate(char* str,int k)
{
    int i=0;
    int n=strlen(str);//求字符串中的字符个数
    for(i=0;i<k;i++)
    {
        //每旋转一个字符
        char temp=*str;//临时变量
        //后面的元素往前挪动
        for(int j=0;j<n-1;j++)
        {
            *(str+j)=*(str+j+1);//后一个元素赋值给前一元素
        }
        *(str+n-1)=temp;//将临时变量赋值给最后一个元素
    }
}
void string_right_rotate(char* str,int k)
{
    int i=0;
    int n=strlen(str);//求字符串中的字符个数
    for(i=0;i<k;i++)
    {
        char temp=*(str+n-1);
        for(int j=n-1;j>0;j--)
        {
            *(str+j)=*(str+j-1);//后一个元素被赋值给前一元素
        }
        *str=temp;//将临时变量赋值给第一个元素
    }
}
int main()
{
    char arr[10]="ABCDEF";
    char brr[10]="ABCDEF";
    int k=3;//左右旋的次数
    string_left_rotate(arr,k);
    string_right_rotate(brr,k);
    printf("%s\n",arr);
    printf("%s\n",brr);
    return 0;
}

代码里有一些注释帮助大家理解。

相关的问题:

给出一个字符串brr[]看它是否是这个字符串arr[]经过左旋得到的,如果是,就给出经过多少次左旋得到的

其实我们可以在左旋的基础上,加一个比较的函数,函数库里面strcmp()就能帮助我们去实现比较的问题,了解原理之后,我们来看下代码

#include<stdio.h>
#include<string.h>//使用strcmp()函数,需要引用#include<string.h>
void string_left_rotate(char* str,int k)
{
    int i=0;
    int n=strlen(str);
    for(i=0;i<k;i++)
    {
        //每旋转一个字符
        char temp=*str;
        //后面的元素往前挪动
        for(int j=0;j<n-1;j++)
        {
            *(str+j)=*(str+j+1);
        }
        *(str+n-1)=temp;
    }
}
int main()
{
    char arr[10]="ABCDEF";
    char brr[10]="ABCDEF";
    int k=strlen(arr);//求出字符串中字符的个数
    while(k)
    {
        char arr[10]="ABCDEF";
        string_left_rotate(arr,k);
        printf("%s\n",arr);//更清楚了解左旋了多少次
        if(strcmp(arr,brr)==0)
        {
            printf("arr左旋%d次得到brr\n",k);
            break;//如果我们找到了,我们就可以跳出循环,减少循环次数
        }
        k--;
    }
    if(k==0)
    {
        printf("arr左旋得不到brr\n");
    }
    return 0;
}

看完之后希望大家能够完全掌握,也欢迎大家指出其中的不足,谢谢大家

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值