1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1

来源:互联网 发布:电气计算软件中文 编辑:程序博客网 时间:2024/06/13 18:03

1.实现一个函数,可以左旋字符串中的k个字符。
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA

将一个字符串左旋k个,首先想到将一个字符串左旋一个,然后把得到的这个新字符串在进行左旋一次,总共这样循环k次,就得到左旋k次后的字符串

比如:

abcdef左旋一次得到bcdefa,再把bcdefa左旋一次,得到cdefab,这样进行下去就可得到左旋k次后的字符串

#include<stdio.h>#include<stdlib.h>#include<string.h>void reverse(char arr[], int n, int len){int i = 0;while(n)//将字符串左旋{char tmp = arr[0];//保存首字符,不然覆盖后就不存在了for(i=0; i<len-1; i++)//将第一个字符后的所有字符向前移动{arr[i] = arr[i+1];}arr[len-1] = tmp;//将第一个字符放到字符串的末尾n--;//进行下一次左旋}}int main(){char arr[] = "aabcd";int n = 0;scanf("%d",&n);reverse(arr, n,strlen(arr));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
AABCD右旋两个字符得到CDAAB

这个题和上个题的方法差不多

先将s1左旋一位,判断是否和s2相等,相等则返回1,不想等就就将s1再左旋一位,然后再和s2比较,如果左旋strlen(s1)次后还没有相等就返回0.

#include<stdio.h>#include<stdlib.h>#include<string.h>int reverse(char arr1[], char arr2[], int len){int n = len;int i = 0;while(n){char tmp = arr1[0];for(i=0; i<len-1;i++){arr1[i] = arr1[i+1];}arr1[len-1] = tmp;if(strcmp(arr1,arr2) == 0)//字符串比较函数return 1;n--;}//当左旋n次后arr1与arr2还不相等时while循环就结束了此时n==0if(n == 0)return 0;}int main(){char arr1[] = "abcdef";char arr2[] = "cdefab";int count = reverse(arr1, arr2,strlen(arr1));if(count == 1)printf("arr2是arr1翻转之后的字符串\n");if(count == 0)printf("arr2不是arr1翻转之后的字符串\n");system("pause");return 0;}


0 0