Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4197038
  • 博文数量: 776
  • 博客积分: 13014
  • 博客等级: 上将
  • 技术积分: 10391
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-22 17:00
文章分类

全部博文(776)

文章存档

2015年(55)

2014年(43)

2013年(147)

2012年(20)

2011年(82)

2010年(429)

分类: C/C++

2010-11-30 08:46:25

#include
#include

static void Swap ( char *p, char *q );

void StringShift ( char *str, int len, int n )
{
    int i, tmp;
    char *s = str;

    if ( str == NULL )
    {
        return;
    }

    if ( len <= 0 || n <= 0 || n >= len )
    {
        return;
    }

    while ( n != len - n )
    {
        if ( n < len - n )
        {
            for ( i = 0; i < n; i++ )
                Swap ( &s[i], &s[len - n + i] );

            len -= n;
        }
        else
        {
            for ( i = len - 1; i > n - 1; i-- )
                Swap ( &s[i], &s[i - n] );

            s += len - n;
            tmp = n;
            n = n + n - len;
            len = tmp;
        }
    } // end while

    for ( i = 0; i < n; i++ )
    {
        Swap ( &s[i], &s[n + i] );
    }
}


static void Swap ( char *x, char *y )
{
    *x ^= *y ;
    *y ^= *x ;
    *x ^= *y ;
}


int main()
{
    int i;
    char A[] = {1, 2, 3, 4, 5, 6, 7};

    StringShift ( A, 7, 1 );

    for ( i = 0; i < 7; i++ )
    {
        printf ( "%d, ", A[i] );
    }

    return 0;
}

 

阅读(1665) | 评论(0) | 转发(0) |
0

上一篇:循环队列的实现

下一篇:crc16

给主人留下些什么吧!~~