1.字符串左旋
实现一个函数,可以左旋字符串中的k个字符。
例如:ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
方法一:按部就班
1.拷贝一个字符
2.数组整体前移
3.拷贝的字符放到数组最后
重复k次就行了。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
void left_turn(char arr[], int k)
{
int sz = strlen(arr);
while (k--)
{
//存第一个数
char tmp = arr[0];
//数组整体前移1
int i = 0;
for (i = 0; i < sz - 1; i++)
{
arr[i] = arr[i + 1];
}
//第一个数放到最后
arr[sz - 1] = tmp;
}
}
int main()
{
char arr[] = "ABCD";
int k = 0;
scanf("%d", &k);
left_turn(arr, k);
printf("%s", arr);
return 0;
}
方法二:追加自身
比如一个字符串是ABCD,在它后面再追加一个ABCD后,就变成ABCDABCD
左旋一个就是ABCDABCD
左旋三个就是ABCDABCD
左旋四个就是ABCDABCD
左旋五个就是ABCDABCD
...
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
void left_turn(char arr[], int k)
{
int sz = strlen(arr);
char tmp[20] = { 0 };
strcpy(tmp, arr, sz);
strncat(tmp, tmp, sz);
k %= sz;
strncpy(arr, tmp+k, sz);
}
int main()
{
int k = 0;
scanf("%d", &k);
char arr[] = "ABCDE";
left_turn(arr, k);
printf("%s", arr);
return 0;
}
2.字符串旋转结果
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
#include <stdio.h>
#include <string.h>
int judge_str(char arr1[], char arr2[])
{
int len = strlen(arr1);
//追加本身
char tmp[12] = { 0 };
strcpy(tmp, arr1);
strncat(tmp, tmp, len);
//查找字符串
char* p = strstr(tmp, arr2);
if (p == NULL)
{
return 0;
}
else
return 1;
}
int main()
{
char arr1[] = "AABCD";
char arr2[] = "BCDAA";
int ret = judge_str(arr1, arr2);
if (ret == 1)
printf("找到了\n");
else
printf("没找到\n");
return 0;
}