C语言三种方法实现字符串右旋

来源:互联网 发布:百度小号批发淘宝 编辑:程序博客网 时间:2024/06/05 07:36

方法一:三步旋转法

#define _CRT_SECURE_NO_WARNINGS 1  #include<stdio.h>  #include<stdlib.h>  #include<string.h>  #include<assert.h>  //三步旋转法void filp(char *left, char *right){assert(left);assert(right);while (left<right){char temp = *left;*left = *right;*right = temp;left++;right--;}}void RightHand(char *str, int len){assert(str);int num = strlen(str);filp(str, str + num - len - 1);         //edcbafjfilp(str + num - len, str + num - 1);   //edcbajffilp(str, str + num - 1);               //fjabcde}int main(){char a[] = "abcdefj";RightHand(a, 2);printf("%s\n", a);system("pause");return 0;}


方法二:移项法

#define _CRT_SECURE_NO_WARNINGS 1  #include<stdio.h>  #include<stdlib.h>  #include<string.h>  #include<assert.h>  //移项法void RightHand(char *str, int len){assert(str);int i = 0;int num = 0;char temp = 0;for (i = 0; i < len; i++){num = strlen(str);num--;temp = str[num];while (num>0){str[num] = str[num - 1];num--;}str[num] = temp;}}int main(){char a[] = "abcdefj";RightHand(a, 2);printf("%s\n", a);system("pause");return 0;}




方法三:进行开辟双倍字符串空间
#define _CRT_SECURE_NO_WARNINGS 1  #include<stdio.h>  #include<stdlib.h>  #include<string.h>  #include<assert.h>  //方法三:进行开辟双倍字符串空间void RightHand(char *str, int len){assert(str);assert(len > 0);char *Buff = NULL;char *start_Buff = Buff;int num = strlen(str);Buff = (char*)malloc(2 * num + 1);strcpy(Buff, str);strcat(Buff, str);strncpy(str, Buff + num-len, num);}int main(){char a[] = "abcdefj";RightHand(a, 2);printf("%s\n", a);system("pause");return 0;}




0 0
原创粉丝点击