字符的左旋

1. 实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB

方法1:常规做法,将每个左移

#include "stdio.h"

void left_move(char *arr, int len, int count)

{

count %= len;//有效的左旋次数

int i = 0;

while (count--)//左旋的次数

{

char tmp = arr[0];//将第一个取出

for (i = 0; i < len-1; i++)//左旋一次

{

arr[i] = arr[i + 1];

        }

arr[i] = tmp;//将取出的第一个放至最后

     }

}

int main()

{

char arr[] = "abcd";

int sz = sizeof(arr)/sizeof(arr[0]);//大小为5

int count = 0;

printf("左旋之前:%s\n", arr);

printf("请输入左旋的字符个数:\n");

scanf_s("%d", &count);

    left_move(arr, sz-1,count);

printf("左旋之后:%s\n", arr);

system("pause");

return 0;

}

 方法2:部分逆序后再整体逆序

void reverse(char *start ,char*end)

{

while (start < end)

{

*start ^= *end;

*end ^= *start;

*start ^= *end;

start++;

end--;

}

}

void left_move(char *arr, int len, int count)

{

count %= len;//有效的左旋次数,假设左旋两次

reverse(arr, arr + count-1);//逆置前半部分 ab -》 ba

reverse(arr + count, arr + len - 1);//逆置后半部分  cd-》dc

reverse(arr, arr + len - 1);//整体逆置  ->cdab

}


2.判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.


AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA

AABCD右旋一个字符得到DAABC

 #include "stdio.h"

#include "assert.h"

#include "string.h"

int is_not(char *p, char*q)

{

assert(p != NULL&&q != NULL);//传入指针不能为空

strcat(p, p, strlen(p));//连接两个字符串的函数

if (strstr(p, q) == NULL)//子字符串比较的函数

{

return -1;

}

else{

return 1;

}

}

int main()

{

int ret = 0;

char arr1[] = "abcd";

char arr2[] = "dabc";

    ret = is_not(arr1, arr2);

if (ret == 1)

{

printf("是");

}

if (ret == -1)

{

printf("不是");

}

system("pause");

return 0;

}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值