Work_11
实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> //字符串翻转 void Reverse_string(char *start, char *end){ while (start < end){ char temp = *start; *start = *end; *end = temp; start++; end--; } } //左旋k个字符 void Reverse(char* arr, int size, int k){ //左旋k次 = 左旋 (k % size) 次 k = k % size; //法一: while (k > 0){ //左旋1次 char* cur = arr; char temp = *arr; while (*(cur + 1)){ *cur = *(cur + 1); cur++; } *cur = temp; k--; } ////法二: 三次翻转法 = 左旋 ////将前k个字符进行翻转 //char* start = arr; //char* end = arr + k - 1; //Reverse_string(start, end); ////将后面的字符进行翻转 //start = end + 1; //end = arr + size - 1; //Reverse_string(start, end); ////整体翻转 //start = arr; //Reverse_string(start, end); } int main(){ char arr[10]; printf("请输入十个以内的字符:\n"); gets(arr); int k; int size = Mystring(arr); printf("请输入需要左旋字符的个数:"); scanf("%d", &k); //左旋k个字符 Reverse(arr, size, k); //输出 printf("%s", arr); printf("\n"); system("pause"); return 0; }
判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> //字符串长度 int Mystring(char* arr){ int count = 0; while (*arr){ count++; arr++; } return count; } //字符串翻转 void Reverse_string(char *start, char *end){ while (start < end){ char temp = *start; *start = *end; *end = temp; start++; end--; } } //左旋k个字符 void Reverse(char* arr, int size, int k){ //左旋k次 = 左旋 (k % size) 次 k = k % size; //法一: while (k > 0){ //左旋1次 char* cur = arr; char temp = *arr; while (*(cur + 1)){ *cur = *(cur + 1); cur++; } *cur = temp; k--; } ////法二: 三次翻转法 = 左旋 ////将前k个字符进行翻转 //char* start = arr; //char* end = arr + k - 1; //Reverse_string(start, end); ////将后面的字符进行翻转 //start = end + 1; //end = arr + size - 1; //Reverse_string(start, end); ////整体翻转 //start = arr; //Reverse_string(start, end); } //比较字符串是否为翻转得来的 int Compare(char* str1, char* str2){ int result = 0; int size = Mystring(str1); while (size){ Reverse(str1, size, 1); if (strcmp(str1, str2) == 0){ result = 1; break; } size--; } return result; } int main(){ char str1[10], str2[10]; printf("请输入第一个字符串:\n"); gets(str1); printf("请输入第二个字符串:\n"); gets(str2); //比较判断 int result = Compare(str1, str2); if (result){ printf("是"); } else { printf("否"); } printf("\n"); system("pause"); return 0; }