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; }