实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <assert.h>
void Leftshift_string(char *str, int k)
{
assert(str);
int len = strlen(str);
k %= len;
int i = 0;
int j = 0;
for (i = 0; i<k; i++)
{
char tmp = *str;
for (j = 0; j < len - 1; j++)
{
str[j] = str[j + 1];
}
str[j] = tmp;
}
}
int main()
{
char str[] = "ABCD";
printf("%s\n", str);
printf("k:");
int k = 0;
scanf("%d", &k);
Leftshift_string(str, k);
printf("%s\n", str);
system("pause");
return 0;
}
判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <assert.h>
int Is_Leftshift_string(char *str1, char *str2)
{
assert(str1);
assert(str2);
int len = strlen(str1);
int i = 0;
int j = 0;
for (i = 0; i<len-1; i++)//将每个字符都左移一遍,如果有一次与字符串相等,就返回1
{
char tmp = *str1;
for (j = 0; j < len - 1; j++)
{
str1[j] = str1[j + 1];
}
str1[j] = tmp;
if (strcmp(str1,str2) == 0)
{
return 1;
}
}
return 0;//将所有的字符串都左移一次,还没有得到相同的,则返回零。
}
int main()
{
char str1[] = "AABCD";
char str2[] = "BCDAA";
printf("%s %s\n", str1,str2);
printf("%d",Is_Leftshift_string(str1,str2));
system("pause");
return 0;
}