字符串操作:左旋转字符串,右旋转字符串,判断一个字符串是否是另一个字符串旋转所得

来源:互联网 发布:淘宝联盟论坛在哪里找 编辑:程序博客网 时间:2024/05/21 11:35

1,左旋字符串:
如:ABCDEFG
左旋3个后得到:DEFGABC

第一种方法:

void Re_left(char arr[],int k){    while (k--)    {        int i = 0;        char tmp = arr[0];        int len = strlen(arr) - 1;        for (i = 0; i < len; i++)        {            arr[i] = arr[i + 1];        }        arr[len] = tmp;    }}int main(){    char arr[] = "abcdefg";    Re_left(arr, 3);    printf("%s\n", arr);    system("pause\n");    return 0;}

第二种方法:

void Reverse(char* left, char* right){    assert(left);    assert(right);    while (left < right)    {        int tmp = *left;        *left = *right;        *right = tmp;        left++;        right--;    }}void left_move(char arr[], int k){    int len = strlen(arr);    //逆序区间    Reverse(arr, arr + k - 1);    Reverse(arr + k, arr + len - 1);    //逆序整个字符串    Reverse(arr, arr + len - 1);}

结果如下:
这里写图片描述

右旋转字符串:
如:ABCDEF
右旋2个后得到:EFABCD

void Re_right(char arr[], int k){    while (k--)    {        int i = 0;        int len = strlen(arr);        int tmp = arr[len - 1];        for (i = len-1; i > 0;i--)        {            arr[i] = arr[i-1];        }        arr[0] = tmp;    }}int main(){    char arr[] = "abcdefg";    Re_right(arr, 3);    printf("%s\n", arr);    system("pause\n");    return 0;}

这里写图片描述

判断一个字符串是否由另一个字符串旋转得到

int is_move(char* str1, const char* str2){    if (strlen(str1) != strlen(str2))    {        return 0;    }    strncat(str1,str1,strlen(str1));    if (strstr(str1, str2) != NULL)    {        return 1;    }    else    {        return 0;    }}int main(){    char arr[20] = "abcdefg";    char arr2[] = "defgabc";    int ret = 0;    ret = is_move(arr, arr2);    if (ret == 1)    {        printf("yes\n");    }    else        printf("no\n");    system("pause\n");    return 0;}

这里写图片描述