字符串翻转问题
1. 实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
#include<stdio.h>
#include<string.h>
char *overturn(char *a, int head, int tail)
{
char *p = a + head;
char *q = a + tail;
char ch;
while(p<q)
{
ch = *p;
*p = *q;
*q = ch;
p++;
q--;
}
return a;
}
int main()
{
char a[] = "abcd";
int len = strlen(a);
int n = 0;
scanf("%d", &n);
overturn(a, 0, n-1);
overturn(a, n, len-1);
overturn(a, 0, len-1);
printf("%s\n", a );
return 0;
}
2.判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
#include<stdio.h>
#include<string.h>
int is_voerturn(char *a, char *b, int len)
{
int sign = 0;
int i = 0, j = 0;
while(a[i] != b[j]) i++;
sign = i;
while(i<len && j<len)
{
if(a[i] != b[j])
{
return 0;
}
i++;
j++;
}
for(i = 0; j<len && i<sign-1; i++, j++)
{
if(a[i] != b[j])
{
return 0;
}
}
return 1;
}
int main(){
char a[] = "abcdefg";
char b[] = "efgabcd";
int len = strlen(a);
if(is_voerturn(a, b, len) == 1) printf("yes\n");
else printf("no\n");
return 0;
}