法1:

    判断是否是其左旋再判断是否是右旋。


#include
#include
#include
void Reverse(char* left, char* right){    while (left < right)    {        char tmp = *left;        *left = *right;        *right = tmp;        left++;        right--;    }}char* Left_Reverse(char* arr, int k, int len)//接收,否则无法将变化的字符串和arr2比较{    char* cur = arr;    Reverse(arr, arr + k - 1);    Reverse(arr + k, arr + len - 1);    Reverse(arr, arr + len - 1);    return cur;}char* Right_Reverse(char* arr, int k, int len)//接收{    char* cur = arr;    Reverse(arr, arr + len - k - 1);    Reverse(arr + len - k, arr + len - 1);    Reverse(arr, arr + len - 1);    return cur;}int main(){    char arr1[] = "AABCD";    char arr2[] = "CDAAB";    int len = strlen(arr1);    int k = 0;    //判断是否左旋得到    for (k = 0; k < len; k++)    {        char* ret1 = Left_Reverse(arr1, k, len);        if (strcmp(ret1, arr2) == 0)        {            printf("左旋\n");            break;        }    }    //判断是否右旋得到    char _arr1[] = "AABCD";  //之前的arr1经过左旋后已经发生了改变    k = strlen(arr1);  //k = len主要想从不旋转开始比较字符串    char* ret2 = NULL;    while (k > 0)    {        ret2 = Right_Reverse(_arr1, k, len);        if (strcmp(ret2, arr2) == 0)        {            printf("右旋\n");            break;        }        k--;    }    if ((k == 0) && (strcmp(ret2, arr2) != 0))    {        printf("既不是左旋又不是右旋\n");    }    system("pause");    return 0;}

法2:

    判断一个字符串是否是另一个字符串自身连接的子串。

    假设两个字符串分别为ABCD和DCBA,将第一个字符串“ABCD”连接成新的字符串“ABCDABCD”。再比较新的字符串"ABCDABCD“与字符串”DCBA“,判断字符串”DCBA“是不是另一个字符串的子串。如果是,则说明是旋转字符串。


#define _CRT_SECURE_NO_WARNINGS 1#include
#include
#include
#include
char* my_strncat(char* dest, char* src, int size){    assert(dest);    assert(src);    char* tmp = dest;    while (*dest)    {        dest++;            }    while (size)    {        *dest++ = *src++;            size--;    }        *dest = '\0';    return tmp;}int main(){    char arr1[15] = "AABCD";    char arr2[] = "BCDAA";    int len = strlen(arr1);    char* ret1 = my_strncat(arr1, arr1, len);//ret1是arr1自己连接自己后的字符串    char* ret2 = strstr(ret1, arr2);    if (*ret2 == NULL)    {        printf("不是!");    }    else    {        printf("是!");    }    system("pause");    return 0;}