您的位置:首页 > 编程语言 > C语言/C++

判断一个字符串是否为另一个字符串旋转之后的字符串

2015-11-02 19:14 363 查看
----------------------------------------------------------------------------------------------------
例如,源字符串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’。
------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言