1.实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
#include <stdio.h>
#include <windows.h>
//1.实现一个函数,可以左旋字符串中的k个字符。
//ABCD左旋一个字符得到BCDA
//ABCD左旋两个字符得到CDAB
char move_steps(char *msg, int steps){
int i = 0;
int len = strlen(msg);
steps = steps % len; //保证移动的位数在字符串长度范围内
while (steps){
char tmp = msg[0];
for (i = 0; i < len - 1; i++){
msg[i] = msg[i + 1];
}
msg[i] = tmp;
steps--;
}
return msg;
}
int main(){
char msg[] = "ABCDEFG";
move_steps(msg, 3);
printf("%s\n", msg);
system("pause");
return 0;
}
2.判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
#include <stdio.h>
#include <assert.h>
#include <windows.h>
int rotate(char *p, char *q)
{
assert(p != NULL && q != NULL);
strncat(p, p, strlen(p));
if (strstr(p, q) == NULL)
{
return 0;
}
else
{
return 1;
}
}
void isRotate(int ret) {
if (ret == 1)
printf("前者可以被后者旋转得到!\n");
else
printf("前者不可以被后者旋转得到!\n");
}
int main(){
char p[20] = "AABCD";
char *q = "BCDAA";
char r[20] = "abcd";
char *s = "ACBD";
int ret1 = rotate(p, q);
int ret2 = rotate(r, s);
isRotate(ret1);
isRotate(ret2);
system("pause");
return 0;
}