方法一:三步旋转法
#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); //edcbafj filp(str + num - len, str + num - 1); //edcbajf filp(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;}
新闻热点
疑难解答