----------------------------------------------------------------------------------------------------
例如,源字符串src为:abcde 目标字符串dst为:bcdea 要想判断dst是否是经过src旋转得到,可以用左旋或者右旋来判断,此时,将src左旋一个字符即可得到dst字符串。这个问题我们其实可以转化为判断一个字符串是否为另一个字符串的子字符串,第一步,将src原字符串复制粘贴到src的后边,此时的src为:abcdeabcde,字符串bcdea明显为src的子字符串。这样,问题就好解决了。
----------------------------------------------------------------------------------------------------
C语言代码:
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <assert.h>
# define MAX 50
int Compare(char *pstr, char *parr)
{
assert(pstr);
assert(parr);
int count;
int length = strlen(parr);
//按顺序依次比较
while (*parr)
{
count = 0;
while(*pstr != *parr && *pstr != ‘\0‘)
{
pstr++;
}
while (*pstr == *parr)
{
count++;
if (count == length)
{
return 1;
}
pstr++;
parr++;
}
parr++;
}
//逆序依次比较
parr = (parr + length - 1);
while (length)
{
count = 0;
while (*pstr != *parr && *pstr != ‘\0‘)
{
pstr++;
}
while (*pstr == *parr)
{
count++;
if (count == length)
{
return 1;
}
pstr++;
parr--;
}
length--;
}
return 0;
}
int main()
{ char str[MAX] = "abcdef";
char arr[MAX] = "";
int ret = 0;
//str:abcdefabcdef fedcba
strcat(str, "abcdef");
printf("请输入要比较的字符串:");
scanf("%s",arr);
ret = Compare(str,arr);
if (1 == ret)
{
printf("该字符串可以由源字符串旋转得到\n");
}
else
{
printf("该字符串无法由源字符串旋转得到\n");
}
system("pause");
return 0;
}------------------------------------------------------------------------------------------
干货小知识:字符串函数strlen()计算字符串的有效长度,不包含‘\0’。
------------------------------------------------------------------------------------------
本文出自 “无名小卒” 博客,请务必保留此出处http://814193594.blog.51cto.com/10729329/1708934
原文:http://814193594.blog.51cto.com/10729329/1708934