1.字符串左旋
实现一个函数,可以左旋字符串中的k个字符。
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
分析:我们先考虑左旋一个字符然后进行for循环满足题目要求的左旋次数,先将字符‘A’保存起来,然后将'BCD‘依次向前移,最后再将’A‘放进最后一位即可满足条件,下面我们进行操作.
代码如下:
void my_leftmove(char* arr, int m)
{
int len = strlen(arr);
int i,j;
for (i = 0; i < m; i++)
{
//旋转一个字符
//1.将第一个字符存起来
char p = *arr;
//2.将后面的字符依次往前移
for (j = 0; j < len - 1; j++){
*(arr + j) = *(arr + j + 1);
}
//3.把保存的字符放在最后一位
*(arr + len - 1) = p;
}
}
int main()
{
char arr[] = "ABCD";
int k;
scanf("%d", &k);
my_leftmove(arr, k);
printf("%s", arr);
return 0;
}
2.
字符串旋转结果
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1
给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
代码1如下:
#include<stdio.h>
void my_leftmove(char* arr, int m)
{
int len = strlen(arr);
int i,j;
for (i = 0; i < m; i++)
{
//旋转一个字符
//1.将第一个字符存起来
char p = *arr;
//2.将后面的字符依次往前移
for (j = 0; j < len - 1; j++){
*(arr + j) = *(arr + j + 1);
}
//3.把保存的字符放在最后一位
*(arr + len - 1) = p;
}
}
int is_moveleft(char a1[], char a2[])
{
int len1= strlen(a1);
int len2 = strlen(a2);
//先判断字符串长度是否相等,不相等则直接返回;
if (len1 != len2) {
return 0;
}
int i=0;
for (i = 0; i < len1; i++) {
//字符串左移
my_leftmove(a1, 1);
//比较俩个数组是否相等;
if (strcmp(a1, a2) == 0) {
return 1;
}
}
return 0;
}
int main()
{
char a1[] = "ABCDE";
char a2[] = "BCD";
int ret = is_moveleft(a1,a2);
if (ret == 1) {
printf("YES\n");
}
else {
printf("NO\n");
}
return 0;
}
代码2如下:
#include<stdio.h>
#include<assert.h>
#include<assert.h>
int is_moveleft(char a1[], char a2[]) {
//判断是否为空
assert(a1);
assert(a2);
int len1 = strlen(a1);
int len2 = strlen(a2);
if (len1 != len2) {
return 0;
}
int i = 0;
//给a1后面追加一个a1的字符串
strncat(a1, a1, len1);
//判断a2是否是a1的字符串
if (NULL == strstr(a1, a2)) {
return 0;
}
else {
return 1;
}
}
int main()
{
char a1[] = "ABCDE";
char a2[] = "BCDEA";
int ret = is_moveleft(a1,a2);
if (ret == 1) {
printf("YES\n");
}
else {
printf("NO\n");
}
return 0;
}