判断一个字符串是否为另外一个字符串旋转之后的字符串

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

AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA

AABCD右旋一个字符得到DAABC
方法一

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int  len(char arr[])
{
    int i;
    for ( i = 0; arr[i] != '\0'; i++)
        ;
    return i;
}
int Isswap(char *str, char *sub)
{
    char *p = malloc(strlen(str) + strlen(str) + 1);
    strcpy(p, str);
    strcat(p, str);//strcat()函数是字符串拼接函数,结果为abcdefabcdef
    if (strstr(p, sub) == NULL)//strstr()函数,参数为两个字符串,进行字符串循环比较,如果p中不存在sub字符串,则返回NULL
        return 0;
    return 1;
}
int main()
{
    char arr[] = "abcdef";
    char arr1[] = "cdefab";
    int r = Isswap(arr, arr1);
    if (r == 1)
        printf("1.找到\n");
    else
        printf("0.没有\n");
    system("pause");
    return 0;

}

方法二

#include<stdio.h>
#include<stdlib.h>
int swap(char arr[],char arr2[], int z)
{
    int s = z-3;
    for (int i = 0; i < z-2; i++)
    {
        int count = 0;
        char t = arr[i];
        arr[i] = arr[z - 1 - s];
        arr[z - 1 - s] = t;
        s--;
        for (int i = 0; i < z - 1; i++)
        {
            if (arr[i] == arr2[i])
                count++;
        }
        if (count == z - 1)
            return 1;
    }
    return 0;
}
int main()
{
    char arr[] = "ABCD";
    char arr2[] = "CDAB";
    int z = sizeof(arr) / sizeof(arr[0]);
    int ret = swap(arr,arr2, z);
    printf("对比的结果为:%d", ret);
    system("pause");
    return 0;
}

第一种方法比较简单,也便于理解,重要的是对字符串函数有所了解。如果知道可以直接调用。

猜你喜欢

转载自blog.csdn.net/qq_39032310/article/details/79968269