1.实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB ‘’
#include<stdio.h>
#include<stdlib.h>
void rotate(char *a, int n)
{
int temp = 0;
int i = 0;
for (i = 0; i < n; i++)
{
temp = a[0];
a[0] = a[1];
a[1] = a[2];
a[2] = a[3];
a[3] = temp;
}
}
int main()
{
char a[5] = { 'A', 'B', 'C', 'D','\0' };
int n = 0;
printf("当前数组为:\n");
printf("%s", a);
printf("请输入您想要旋转个字符个数:\n");
scanf("%d", &n);
rotate(a, n);
printf("旋转%d个字符之后的字符串为:\n",n);
printf("%s", a);
system("pause");
}
2.判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
void rotate(char *b)
{
int temp = 0;
int i = 0;
temp = b[0];
b[0] = b[1];
b[1] = b[2];
b[2] = b[3];
b[3] =b[4];
b[4] = temp;
}
int same(char *a, char *b)
{
int q = 0;
for (q = 0; q < 6; q++)
{
if (a[q] != b[q])
return 0;
}
return 1;
}
int ifornot(char *a, char *b)
{
int k = 0;
int y = 0;
for (k = 0; k < 5; k++)
{
y = same(a, b);
if (y == 0)
{
rotate(b);
continue;
}
else
return 1;
}
if (k == 5)
return 0;
}
int main()
{
char a[6] = { 0 };
char b[6] = { 0 };
int i = 0;
int p = 0;
printf("请对字符串a进行初始化:\n");
for (i = 0; i < 5; i++)
{
scanf("%c", &a[i]);
fflush(stdin);
}
a[i] = '\0';
printf("初始化后的字符串a为%s\n", a);
printf("请输入要判断的字符串b:\n");
for (i = 0; i < 5; i++)
{
scanf("%c", &b[i]);
fflush(stdin);
}
b[i] = '\0';
printf("初始化后的字符串b为%s\n", b);
p=ifornot(a, b);
if (p == 0)
printf("不能旋转得到\n");
else
printf("可以旋转得到\n");
system("pause");
return 0;
}