位&翻转(2)

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#pragma warning(disable:4996)

void Inverse(char *x,char *y)
{
    while(x<y)
    {
        *x^=*y;
        *y^=*x;
        *x^=*y;
        x++;
        y--;
    }
}
void Left_Move1 (char *arr,int size,int count)
{
    count %= size;
    Inverse(arr,arr+count-1);
    Inverse(arr+count,arr+size-1);
    Inverse(arr,arr+size-1);
}
void Left_Move(char *arr,int size,int count)
{
    int newSize = 2*size+1;
    char *pStr = (char*)malloc(sizeof(char)*newSize);
    count %= size;
    strcpy(pStr,arr);
    strcat(pStr,arr);
    strncpy(arr,pStr+count,size);
    free (pStr);

}
int main()
{
    int count;
    char arr[]="abcd1234";
    int size;
    scanf("%d",&count);
    size = sizeof(arr)/sizeof(arr[0])-1;
    //size = strlen(arr);
    Left_Move (arr,size,count);
    //Left_Move1 (arr,size,count);
    printf("%s\n",arr);
    return 0;
}

2。
判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#pragma warning(disable:4996)

int Find_isMove(char *arr,char *goal_arr)
{
    int size = strlen(arr);
    int goal_size = strlen(goal_arr);

    int newSize = 2*size+1;
    char *pStr = (char*)malloc(sizeof(char)*newSize);

    if(size != goal_size)
    {
        return 0;
    }

    strcpy(pStr,arr);
    strcat(pStr,arr);
    if (strstr(pStr,goal_arr))
    {
        return 1;
    }
    return 0;
    free (pStr);//申请的空间 需要释放 否则内存泄漏
}


int main()
{
    char arr[]="1234abcd";
    char goal_arr[]="4abcd123";
    int res;
    res=Find_isMove(arr,goal_arr);
    if(res)
    {
        printf("is move\n");
    }
    else
    {
        printf("is not move\n");

    }
    return 0;
}

递归(题)
http://blog.csdn.net/romantic_c/article/details/78664881

宏(题)
http://blog.csdn.net/romantic_c/article/details/79451028

位&翻转_1(题)
http://blog.csdn.net/romantic_c/article/details/79455583

猜你喜欢

转载自blog.csdn.net/romantic_c/article/details/79476849
今日推荐