一、
作业标题
字符串旋转结果
作业内容
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:
给定s1 =AABCD和s2 = BCDAA,返回1
给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
//方法一
int LRound(char* str1, char* str2, int len) //左旋遍历一次后,字符串所有的可能形式已经包含,不需要再右旋
{
int i = 0;
int j = 0;
int ret = 0;
char temp = 0;
for (j = 0; j < len; j++)
{
for (i = 0; i < len - 1; i++)
{
temp = str1[i];
str1[i] = str1[i + 1];
str1[i + 1] = temp;
}
if (strcmp(str1, str2) == 0)
{
return 1;
}
}
return 0;
}
int main()
{
int i = 0;
int j = 0;
int n = 0;
int len = 0;
int ret = 0;
char str1[100] = { 0 };
char str2[100] = { 0 };
printf("请输入原字符串:\n");
gets(str1);
printf("请输入要比较的字符串:\n");
gets(str2);
len = strlen(str1);
ret = LRound(str1, str2, len);
if (ret)
{
printf("%d", ret);
return 0;
}
else
{
printf("%d", ret);
return 0;
}
return 0;
}
//方法二
int main()
{
int i = 0;
int ret = 0;
int* p = NULL;
char str1[100] = { 0 };
char str2[100] = { 0 };
char str3[200] = { 0 };
printf("请输入原字符串:\n"); //例如AABCD
gets(str1);
printf("请输入要比较的字符串:\n"); //例如BCDAA
gets(str2);
strcpy(str3, str1); //先拷贝一遍,str3=AABCD
strcat(str3, str1); //再连接一遍,str3=AABCDAABCD,这样AABCD不管左旋还是
//右旋的所有可能都已包含在AABCDAABCD的子集中
p = strstr(str3, str2); //返回指向 str3 中第一次出现str2的指针,如果str2不
//是str3的一部分,则返回空指针。匹配过程不包括终止的
//空字符,但它会停在那里
if (p == NULL)
{
printf("0\n");
}
else
{
printf("1\n");
}
return 0;
}