思路讲解:
首先:根据上一篇博客左旋一个字符串的实现方法,我们只需要将给定字符串所有的左旋情况列举出来。
然后:利用strcmp()函数将每个左旋后的字符串与目标字符串对比,如果相同就返回,所有的都不相同就跳出循环输出不相同。
#include<stdio.h>
#include<stdlib.h>
#include<string>
//用指针左旋字符串
int main()
{
char str[] = "0";
scanf("%s", str);
char zuoxuan[] = "0";
char shuru[] = "0";
scanf("%s", shuru);
char *p = str;
char *q = zuoxuan;
int a = 2;//要左旋第几个
int b = strlen(str);//7
int i = 0;
int c = 0;
for (a = 0; a <= b; ++a)
{
if (0 == a)
{
c = 0;
}
else
{
for (i = a - 1; i <= b; ++i)
{
*(q + c) = *(p + i);
++c;
}
for (i = 0; i < a - 1; ++i)
{
*(q + c - 1) = *(p + i);
++c;
}
*(q + c - 1) = '\0';
c = 0;
//puts(zuoxuan);
}
int jieshou = strcmp(shuru, zuoxuan);
//printf("%d\n", jieshou);
if (0 == jieshou)
{
printf("是这个字符串的左旋\n");
break;
}
else if (b == a)
{
jieshou = strcmp(shuru, zuoxuan);
if (0 == jieshou)
{
printf("是左旋后的字符串\n");
}
else
{
printf("不是左旋后的字符串\n");
}
}
}
system("pause");
return 0;
}
亮点展示:
else if (b == a)
{
jieshou = strcmp(shuru, zuoxuan);
if (0 == jieshou)
{
printf("是左旋后的字符串\n");
}
else
{
printf("不是左旋后的字符串\n");
}
}
在这里将最后一次循环截进if判断里单独判断。
因为要是有最后一个字母之前任意一个字母左旋后的结果相同就已经跳出循环。
最后一次单独判断,是否相同,如果不相同就输出不是它的左旋后的字符串即可。