判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定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;
}
第一种方法比较简单,也便于理解,重要的是对字符串函数有所了解。如果知道可以直接调用。