1.字符串左旋
实现一个函数,可以左旋字符串中的k个字符
例如 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB
#include <stdio.h>
void string_left_rotate(char* str, int k)
{
int i = 0;
int n = strle(str);
for(i = 0;i<k;i++)
{
//每次左旋转一个字符
char tmp = *str;//1
//2.把后面的n-1个字符往前挪动
int j = 0;
for(j = 0;j<n-1;j++)
{
*(str+j) = *(str+j+1);
}
//3.把tmp放在最后
*(str+n-1) = tmp;
}
}
int main()
{
char arr[10] = "ABCDEF";
int k = 2;
string_left_rotate(arr,k);
printf("%s\n",arr);
return 0;
}
方法2:写一个逆序函数调用三次
#include <stdio.h>
#include <string.h>
#include <assert.h>
void resverse(char* left, char* right)
{
assert(left);
assert(right);
while(left<right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void string_left_rotate(char* str, int k)
{
assert(str);
int n = strlen(str);
reverse(str,str+k-1);//左
reverse(str+k,str+n-1);//右
reverse(str,str+n-1);//整体逆序
}
int main()
{
char arr[10] = "ABCDEF";
int k = 2;
string_left_rotate(arr,k);
printf("%s\n",arr);
return 0;
}
2.字符串旋转结果判断
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。列如给定S1 = AABCD和S2 = BDCAA,返回1。给定S1 = abcd和S2 = ABCD,返回0。
#include <stdio.h>
#include <string.h>
int is_string_rotate(char*str1, char*str2)
{
int i = 0;
int n = strle(str1);
for(i = 0;i<n;i++)
{
//每次左旋转一个字符
char tmp = *str1;//1
//2.把后面的n-1个字符往前挪动
int j = 0;
for(j = 0;j<n-1;j++)
{
*(str1+j) = *(str1+j+1);
}
//3.把tmp放在最后
*(str1+n-1) = tmp;
if(strcmp(str1,str2)==0)
{
return 1;
}
}
return 0;
}
int main()
{
char arr1[] = "AABCD";
char arr2[] = "BCDAA";
int ret = is_string_rotatr(arr1,arr2);
if(ret==1)
{
printf("yes\n");
}
else
{
printf("no\n");
}
return 0;
}
每旋转一次判断一次
使用库函数法
#include <stdio.h>
#include <string.h>
int is_string_rotate(char*str1, char*str2)
{
if(strlen(str1)!=strlen(str2))
{
return 0;
}
//1.str1字符串后面追加一个str1
//ABCDABCAD
int len = strlen(str1);
strncat(str1,str1,len);
//2.判断str2是否为str1的子串
char* ret = strstr(str1,str2);
//AABCDAACD
//BCDAA
if(ret = NULL)
{
return 0;
}
else
{
return 1;
}
//或者不用if 直接使用语句 return ret != NULL;
}
int main()
{
char arr1[20] = "AABCD";
char arr2[] = "BCDAA";
int ret = is_string_rotatr(arr1,arr2);
if(ret==1)
{
printf("yes\n");
}
else
{
printf("no\n");
}
return 0;
}