个人备案能公司网站,wordpress thecorporationtheme,网站如何做问卷调查报告,苏州学网站建设字符串左旋
实现一个函数#xff0c;可以左旋字符串中的k个字符。 例如#xff1a; ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB
方法1
三步翻转法 要求:abcdef 左旋两个
整体逆序:fedcba左边逆序:cdef ba右边逆序:cdef ab
#includestdio.h
#include可以左旋字符串中的k个字符。 例如 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB
方法1
三步翻转法 要求:abcdef 左旋两个
整体逆序:fedcba左边逆序:cdef ba右边逆序:cdef ab
#includestdio.h
#includestring.h
#includeassert.h
void reverse(char* left, char* right)
{assert(left);assert(right);while (left right){char tmp *left;*left *right;*right tmp;left;right--;}
}
void left_move(char* arr, int k)
{assert(arr);int len strlen(arr);k % len;reverse(arr, arr len - 1);//逆序整体reverse(arr, arr len - k - 1);//逆序左边reverse(arr len - k, arr len - 1);//逆序右边
}
int main()
{char arr[] abcdef;left_move(arr, 2);printf(%s\n, arr);return 0;
}方法2
将第一个元素放到临时变量后面元素前移一位然后把临时变量的值放到最后循环
#includestdio.h
#includestring.h
#includeassert.h
void left_move(char* arr, int k)
{assert(arr);size_t len strlen(arr);k % len;while (k--){char tmp *arr;size_t i 0;for (i 0; i len - 1; i){arr[i] arr[i 1];}arr[len - 1] tmp;}
}
int main()
{char arr[] abcdef;left_move(arr, 2);printf(%s\n, arr);return 0;
}字符串旋转结果
写一个函数判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如 给定s1 AABCD和s2 BCDAA返回1 给定s1abcd和s2ACBD返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
方法1(穷举)
#includestdio.h
#includestring.h
#includeassert.h
int is_left_move(char* str1, char* str2)
{assert(str1 str2);size_t len1 strlen(str1);size_t len2 strlen(str2);if (len1 ! len2)return 0;int i 0;for (i 0; i len1; i){char tmp *str1;size_t j 0;for (j 0; j len1 - 1; j){str1[j] str1[j 1];}str1[len1 - 1] tmp;if (!strcmp(str1, str2))return 1;}return 0;
}
int main()
{char str1[] abcdef;char str2[] bcdefa;if (is_left_move(str1, str2))printf(yes);elseprintf(no);return 0;
}方法2
在原字符串后面追加一个相同的字符串 旋转字符串是这个大的字符串的子字符串
#includestdio.h
#includestring.h
#includeassert.h
int is_left_move(char* str1, char* str2)
{assert(str1str2);int len1 strlen(str1);int len2 strlen(str2);if (len1 ! len2)return 0;strncat(str1, str1, len1);if (strstr(str1, str2) NULL)return 0;elsereturn 1;
}
int main()
{char arr1[30] abcdef;char arr2[] cdefab;if (is_left_move(arr1, arr2))printf(yes\n);elseprintf(no\n);return 0;
}