字符串左旋的定义:
给定字符串arr[] = "abcdef";
整形k ;
k = 1时字符串变为:bcdefa
k = 2时字符串变为:cdefab
...
穷举法解题思路:
给出两个字符串求左旋是否相等,首先左旋其中的一个数组,每旋转一次判断一次是否相等,相等返回1,反之返回0。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int FlipCheck(char* arr1, char *arr2, int size)
{
int i = 0;
for (i = 0; i < size; i++) //循环遍历数组arr1
{
char tmp = *arr1; //将arr1此时首元素取出
int j = 0;
for (j = 0; j < size - 1; j++)
{
*(arr1 + j) = *(arr1 + j + 1); //将第j + 1位元素的值赋给第j位元素
}
*(arr1 + j) = tmp; //将刚才取出的值赋给最后一个元素
if (strcmp(arr1, arr2) == 0) //如果此时两个字符串相等返回1
{
return 1;
}
}
return 0; //循环全部结束找不到返回0
}
int main()
{
char arr1[10] = "abcdef";
char arr2[10] = "cdefab";
int size = strlen(arr1);
if (FlipCheck(arr1, arr2, size)) //FlipCheck返回1输出Found it,否则输出Not found
printf("Found it\n");
else
printf("Not found\n");
return 0;
}
追加法解题:
在arr1字符串后面追加一个arr1字符串,在新的arr1字符串中查找是否有子字符串arr2。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int FlipCheck(char* arr1, char *arr2)
{
if (strlen(arr2) != strlen(arr1)) //字符串长度不相等返回0
return 0;
strncat(arr1, arr1, strlen(arr1)); //追加字符串
return strstr(arr1, arr2) != NULL; //寻找子字符串,若不为空返回1,反之返回0。
}
int main()
{
char arr1[20] = "abcdef"; //因为需要追加字符串,所以定义时需多分配空间
char arr2[10] = "cdefab";
if (FlipCheck(arr1, arr2)) //FlipCheck返回1输出Found it,否则输出Not found
printf("Found it\n");
else
printf("Not found\n");
return 0;
}
这里不能使用strcat函数,因为strcat函数不能自己追加给自己,需要使用strncat函数
strncat函数定义:
char *strncat( char *strDest, const char *strSource, size_t count );
*strDest 是目标字符串地址,
*strSource 是资源字符串地址(也可以是常量字符串)
count 是需要追加的字符个数