旋转字符串并判断

左旋字符串:

#define _CRT_SECURE_NO_WARNINGS 1 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>

void reverse(char *str,int left,int right)
{
   assert(str);
   while(left<right)
   {
       char tmp=*(str+left);
	   *(str+left)=*(str+right-1);
	   *(str+right-1)=tmp;
	   left++;
	   right--;
   }
}
void left_reverse(char *src,int n)
{
	int sz=strlen(src);
	assert(src);
	reverse(src,0,sz-n);
	reverse(src,0,sz);
	reverse(src,0,n);
}
int main()
{
	char pa[]="abcdefgh";
	int num=0;
	printf("请输入你要左旋字符的个数:");
	scanf("%d",&num);
	left_reverse(pa,num);
	printf("左旋%d个字符后的字符串为%s\n",num,pa);
	system("pause");
    return 0;
}


右旋字符串:

#define _CRT_SECURE_NO_WARNINGS 1 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>

void reverse(char *str,int left,int right)
{
   assert(str);
   while(left<right)
   {
       char tmp=*(str+left);
	   *(str+left)=*(str+right-1);
	   *(str+right-1)=tmp;
	   left++;
	   right--;
   }
}
void right_reverse(char *src,int n)
{
	int sz=strlen(src);
	assert(src);
	reverse(src,n,sz);
	reverse(src,0,sz);
	reverse(src,sz-n,sz);
}
int main()
{
	char pa[]="abcdefgh";
	int num=0;
	printf("请输入你要右旋字符的个数:");
	scanf("%d",&num);
	right_reverse(pa,num);
	printf("右旋%d个字符后的字符串为%s\n",num,pa);
	system("pause");
    return 0;
}


判断是否左旋(判断一个字符串是否为另一字符串左旋之后的字符串)

#define _CRT_SECURE_NO_WARNINGS 1 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>

void reverse(char *str,int left,int right)
{
   assert(str);
   while(left<right)
   {
       char tmp=*(str+left);
	   *(str+left)=*(str+right-1);
	   *(str+right-1)=tmp;
	   left++;
	   right--;
   }
}
int is_left_reverse(const char *dest,char *src)
{
	int sz1 = strlen(src);
	int sz2 = strlen(dest);
	int i = 0;
	assert(src);
	assert(dest);
	if(sz1 != sz2)
	{
	    return 0;
	}
	for(i=1; i<=sz1; i++)
	{
	     reverse(src,i,sz1);
             reverse(src,0,sz1);
       	     reverse(src,sz1-i,sz1);
		 if(0 == strcmp(src,dest))
		 {
			 return sz1-i;
		 }
	}
	return 0;
}
int main()
{
	char pa[]="abcdefgh";
	char *pb="fghabcde";
	int ret=is_left_reverse(pb,pa);
	if(ret!=0)
	{
	    printf("%s是左旋%d之后的字符串\n",pb,ret-1);
	}
	else
	{
		printf("%s不是左旋之后的字符串\n",pb);
	}
	system("pause");
    return 0;
}


判断是否右旋(判断一个字符串是否为另一字符串右旋之后的字符串)

#define _CRT_SECURE_NO_WARNINGS 1 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>

void reverse(char *str,int left,int right)
{
   assert(str);
   while(left<right)
   {
       char tmp=*(str+left);
	   *(str+left)=*(str+right-1);
	   *(str+right-1)=tmp;
	   left++;
	   right--;
   }
}
int is_right_reverse(const char *dest,char *src)
{
	int sz1 = strlen(src);
	int sz2 = strlen(dest);
	int i = 0;
	assert(src);
	assert(dest);
	if(sz1 != sz2)
	{
	    return 0;
	}
	for(i=1; i<=sz1; i++)
	{
	     reverse(src,i,sz1);
             reverse(src,0,sz1);
	     reverse(src,sz1-i,sz1);
		 if(0 == strcmp(src,dest))
		 {
			 return i;
		 }
	}
	return 0;
}
int main()
{
	char pa[]="abcdefgh";
	char *pb="fghabcde";
	int ret=is_right_reverse(pb,pa);
	if(ret!=0)
	{
	    printf("%s是右旋%d个字符之后的字符串\n",pb,ret-1);
	}
	else
	{
		printf("%s不是右旋之后的字符串\n",pb);
	}
	system("pause");
    return 0;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值