1.实现函数完成旋转字符串
实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
方法一:暴力移位
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
void left_move(char *str, int k)
{
assert(str!=NULL);
int i = 0;
int len = strlen(str);
while (k--)
{
char tmp = *str;
//1.保存第一个元素
for (i = 0; i < len-1; i++)
{
//2.后面元素向前挪动移位
*(str + i) = *(str + i + 1);
}
//3.把保存的第一位移动到最后一个元素上
*(str + len - 1) = tmp;
}
}
int main()
{
char arr[] = "abcd";
int k = 3;
left_move(arr, k);
printf("%s\n", arr);
system("pause");
return 0;
}
方法二:三步翻转
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
void reverse(char *left, char *right)
{
assert(left!=NULL);
assert(right!=NULL);
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void left_move(char *arr, int k)
{
assert(arr!=NULL);
int len = strlen(arr);
reverse(arr, arr + k - 1);
reverse(arr + k, arr + len - 1);
reverse(arr, arr + len - 1);
}
int main()
{
char arr[] = "abcd";
int k = 3;
left_move(arr, k);
printf("%s\n", arr);
system("pause");
return 0;
}
2.判断字符串是否为旋转之后的字符串
判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
方法一:旋转出每次的结果,逐个比较
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void left_move(char *str, int k)
{
int i = 0;
int len = strlen(str);
while (k--)
{
char tmp = *str;
//1.保存第一个元素
for (i = 0; i < len-1; i++)
{
//2.后面元素向前挪动移位
*(str + i) = *(str + i + 1);
}
//3.把保存的第一位移动到最后一个元素上
*(str + len - 1) = tmp;
}
}
int Find(char*str1, char *str2)
{
int len1 = strlen(str1);
int len2 = strlen(str2);
int k = len1;
int i = 0;
if (len1 == len2)
{
while (k--)
{
left_move(str1, 1);
if (strcmp(str1, str2) == 0)
return 1;
}
}
return 0;
}
int main()
{
char arr1[] = "AABCD";
char arr2[] = "BCDAA";
int ret=Find(arr1, arr2);
if (ret == 1)
printf("yes\n");
else
printf("no\n");
system("pause");
return 0;
}
方法二:长度一样的情况下,把字符串自身连接起来,看是否为字串
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int Find(char *str1, char *str2)
{
int len1 = strlen(str1);
int len2 = strlen(str2);
if (len1 == len2)
{
strncat(str1, str1, len1);
if (strstr(str1, str2))
return 1;
else
return 0;
}
return 0;
}
int main()
{
char arr1[] = "AABCD";
char arr2[] = "BCDAA";
int ret=Find(arr1, arr2);
if (ret == 1)
printf("yes\n");
else
printf("no\n");
system("pause");
return 0;
}