1,左旋字符串:
如:ABCDEFG
左旋3个后得到:DEFGABC
第一种方法:
void Re_left(char arr[],int k)
{
while (k--)
{
int i = 0;
char tmp = arr[0];
int len = strlen(arr) - 1;
for (i = 0; i < len; i++)
{
arr[i] = arr[i + 1];
}
arr[len] = tmp;
}
}
int main()
{
char arr[] = "abcdefg";
Re_left(arr, 3);
printf("%s\n", arr);
system("pause\n");
return 0;
}
第二种方法:
void Reverse(char* left, char* right)
{
assert(left);
assert(right);
while (left < right)
{
int tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void left_move(char arr[], int k)
{
int len = strlen(arr);
//逆序区间
Reverse(arr, arr + k - 1);
Reverse(arr + k, arr + len - 1);
//逆序整个字符串
Reverse(arr, arr + len - 1);
}
结果如下:
右旋转字符串:
如:ABCDEF
右旋2个后得到:EFABCD
void Re_right(char arr[], int k)
{
while (k--)
{
int i = 0;
int len = strlen(arr);
int tmp = arr[len - 1];
for (i = len-1; i > 0;i--)
{
arr[i] = arr[i-1];
}
arr[0] = tmp;
}
}
int main()
{
char arr[] = "abcdefg";
Re_right(arr, 3);
printf("%s\n", arr);
system("pause\n");
return 0;
}
判断一个字符串是否由另一个字符串旋转得到
int is_move(char* str1, const char* str2)
{
if (strlen(str1) != strlen(str2))
{
return 0;
}
strncat(str1,str1,strlen(str1));
if (strstr(str1, str2) != NULL)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
char arr[20] = "abcdefg";
char arr2[] = "defgabc";
int ret = 0;
ret = is_move(arr, arr2);
if (ret == 1)
{
printf("yes\n");
}
else
printf("no\n");
system("pause\n");
return 0;
}