左旋字符串:
#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;
}