左旋转字符串

来源:互联网 发布:php商城分销系统源码 编辑:程序博客网 时间:2024/04/30 15:49

朴素算法


#include <stdio.h>

#include <stdlib.h>


//左旋转字符串
void trans(char a[],int n,int k)
{
    k%=n;
    int i,j;
    char t;
    for(i=0;i<k;i++)
    {
        t=a[n-1];
        for(j=n-1;j>0;j--) a[j]=a[j-1];
        a[j]=t;
    }
}
int main()
{
    char a[10]="abcdefg";
    int n;
    //printf("%s\n",a);
    while(scanf("%d",&n))
    {
        trans(a,7,n);
        printf("%s\n",a);
    }


    return 0;

}


二、翻转算法


#include <stdio.h>
#include <stdlib.h>


//左旋转字符串
void Con(char*a,int n)//翻转一个长度为n的字符串
{
    int i,j;
    char t;
    for(i=0,j=n-1;i<j;i++,j--)
    {
        t=a[i];
        a[i]=a[j];
        a[j]=t;
    }
}
void Shift(char*a,int n,int k)
{
    Con(a,n-k);
    printf("%s\n",a);
    Con(a+n-k,k);
    printf("%s\n",a);
    Con(a,n);
}
int main()
{
    char a[10]="abcdefg";
    int n;
    //printf("%s\n",a);
    while(scanf("%d",&n))
    {
        Shift(a,7,n);
        //Con(a,7);
        printf("%s\n",a);
    }


    return 0;
}


观察到  第二次开始就出错了。其实没有错  是因为字符串一直在变。



原创粉丝点击