字符的左旋

来源:互联网 发布:网络风暴检测工具 编辑:程序博客网 时间:2024/04/30 13:59

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;

}

 

阅读全文
0 0
原创粉丝点击