
正文
C语言判断字符串是否旋转过
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
//方法一
//每次左旋一次,判断旋转之后字符串是否与目标字符串是否一致
//旋转一圈 没有找到返回0
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h> void left_rotate(char *str, int k)
{
int len = strlen(str);
k %= len;//减少重复次数 char temp = ;
char *cur = str;
while (k--)
{ //左旋一次
temp = *str;
cur = str;
while (*(cur + ) != '\0')
{
//每个字符向前推一个
*cur = *(cur + );
cur++;
} *cur = temp;
}
} int is_rotate(char *dest, char* src)
{
if (strlen(dest) != strlen(src))
{
printf("不是旋转过的!\n");
return ;
}
if (!strcmp(dest, src))
{
printf("旋转过的!\n");
return ;
} int k = strlen(dest);
k--;
while (k--)
{
//每次旋转一次 判断
left_rotate(src, );
//判断旋转之后的内容是否和目标一致
if (!strcmp(dest, src))
{
printf("旋转过的!\n");
return ;
}
}
printf("不是旋转过的!\n");
return ; } //方法二 dest--->abcd 把目标串拼接相同的内容abcdabcd 判断源串是否为目标串的子串
// src---->cdab
int is_rotate02(char *dest, char* src)
{
if (strlen(dest) != strlen(src))
{
printf("不是旋转过后的!\n");
return ;
}
strncat(dest, dest,strlen(dest));
if (strstr(dest, src) != NULL)
{
printf("是旋转过后的!\n");
return ;
}
printf("不是旋转过后的!\n");
return ; } int main()
{
char dest[] = "sssss";
char src[] = "avdasf";
is_rotate02(dest, src); system("pause");
return ;
}







