//1.实现一个函数,可以左旋字符串中的k个字符。
//ABCD左旋一个字符得到BCDA
//ABCD左旋两个字符得到CDAB
#define _CRT_SECURE_NO_WARNINGS 1
#include "stdio.h"
#include "windows.h"
#include"assert.h"
#include "string.h"
#if 1
char* Left(char* p,int n)//n为左旋位数
{
assert(p);
char* dst = p;//记录起始地址
while (n--)
{
char tmp = *dst;
while (*(dst+1))
{
*dst++ = *(dst+1);
}
*dst = tmp;//把第一个值给放到最后
dst = p;//指针从新指向第一个
}
return p;
}
int main(void)
{
char a[10] = "ABCD";
Left(a, 4);
printf("%s\n",a);
system("pause");
return 0;
}
#endif
//2.判断一个字符串是否为另外一个字符串旋转之后的字符串。
//例如:给定s1 = AABCD和s2 = BCDAA,返回1
//给定s1 = abcd和s2 = ACBD,返回0.
#define _CRT_SECURE_NO_WARNINGS 1
#include "stdio.h"
#include "windows.h"
#include"assert.h"
#include "string.h"
#if 1
int Strstr( char*p1, char*p2, int len )
{
assert(p1 && p2);
int n = len;
char *dst = p1; char* src = p2;
while (n--) //左旋判断
{
if (strcmp(dst,src)==0)
return 1;
char tmp = *dst;
while ( *(dst + 1) )
{
*dst++ = *(dst + 1);
}
*dst = tmp;
dst = p1;
}
src = p2;
dst = p1;
while (len)//右旋判断
{
char tmp = *(dst+len);
while (len)
{
*(dst+len--)=*(dst + len-1);
}
*dst = tmp;
dst = p1;
if (strcmp(dst, src) == 0)
return 1;
}
return 0;
}
int main(void)
{
char s1[10] = "AABCD";char s2[10] = "BCDAA";//s2 也是个指针
int len = strlen(s1);
printf("%d",len);
int ret =Strstr(s1, s2, len);
if (ret == 1)
{
printf("是旋转子串\n");
}
else
printf("不是旋转子串");
system("pause");
return 0;
}
#endif