首页 > 学院 > 开发设计 > 正文

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

2019-11-08 03:02:22
字体:
来源:转载
供稿:网友

方法一:三步旋转法

#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;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表