C语言--判断一个字符串是否为另一个字符串的旋转
来源:互联网 发布:网络层ip协议的特征 编辑:程序博客网 时间:2024/06/05 14:51
判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
运行结果:
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
旋转包括左旋右旋两种情况
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<assert.h>#include<string.h>size_t my_strlen(char *str) //求字符串的长度{assert(str != NULL);int count = 0;while (*str){count++;str++;}return count;}void Adjust_s(char *str, int k) //右旋字符串{assert(str != NULL);while (k){int j = 0;int len = my_strlen(str);char temp = *(str + len - 1); //temp存储最后一个字符while (*(str +1+ j)){*(str +len -1-j) = *(str+len-2-j);j++;}*str = temp;k--;}}void Adjust_arr(char *str, int k) //左旋字符串{assert(str != NULL);while (k) {char temp = *str; // temp储存str第一个字符 int j = 0;while (*(str + 1 + j)) //abcd左旋需要改变四个字符,三个需要循环改变,判断条件为str+1+j{*(str + j) = *(str + 1 + j); j++; }*(str + j) = temp; //把temp赋给最后一个字符k--;}}int strsame(char *str1, char *str2) //判断两个字符串是否相等{assert(str1 != NULL);assert(str2 != NULL);int count = 0;int ret = my_strlen(str1);while (*str1){if (*str1 == *str2) {count++;str1++;str2++;}else{break;}}if (count == ret){return 1;}else{return 0;}}int Judge_s(char *str1, char *str2) //str2是否是str1的旋转 {assert(str1 != NULL);assert(str2 != NULL);int i = 0;int adjust = 0;int len = my_strlen(str1); //my_strlen求字符串的长度for (i = 1; i < len; i++) //字符串旋转最多有len个不同的结果,比如abcd 左旋结果为:bcda/cdab/dabc/abcd{Adjust_arr(str1,i); //左旋字符串str1int ret = strsame(str2, str1); //判断str2和旋转后的str1是否相同,相同adjust为1,跳出循环,不同为0,继续循环旋转str1if (ret == 1){adjust = 1;break;}else if (ret == 0){adjust = 0;}}for (i = 0; i < len; i++) //右旋str1{Adjust_s(str1, i);int ret = strsame(str2, str1);if (ret == 1){adjust = 1;break;}else if (ret == 0){adjust = 0;}}return adjust;}int main() {char s1[] = "abcde";char s2[] = "AABBC";int ret = 0;ret = Judge_s(s1, s2); //Judge_s判断是否为旋转后的字符串,int返回值进行判断if (ret == 1){printf("是\n");}else if (ret==0){printf("不是\n");}system("pause");return 0;}
运行结果:
str1"abcde"
str2"AABBC"
str1"abcde"
str2"cdeab" 左旋
str1"abcde"
str2"edabc" 右旋
0 0
- C语言--判断一个字符串是否为另一个字符串的旋转
- 判断一个字符串是否为另一个旋转之后的字符串
- 【C语言】判断一个字符串是否为另一个字符串的回旋字符串
- 【c语言】判断一个字符串是否为另外一个字符串旋转之后的字符串
- C语言 判断一个字符串是否为另外一个字符串旋转之后的字符串
- C语言程序-判断一个字符串是否为另外一个字符串旋转之后的字符串
- 判断一个字符串是否为另一个字符串的旋转后的子字符串
- 【C语言】【笔试题】【面试题】判断一个字符串是否为另外一个字符串旋转之后的字符串
- C语言:判断一个字符串是否为另外一个字符串旋转之后的字符串。(左旋右旋、求子串)
- c语言中判断一个字符串是否包含另一个字符串
- c语言中判断一个字符串是否包含另一个字符串
- 【C语言】判断一个字符串是否是一个字符串的旋转字符串
- 判断一个字符是否是另一个字符的旋转字符串
- 判断一个字符串是否为另一个字符串的子串
- C语言判断一个字符串是否是另一个字符串的子串
- 判断一个字符串是否由另一个字符串旋转而成
- 【C语言】判断一个字符串是否为回文字符串
- 【C语言】判断一个字符串是否为回文字符串。
- 模态对话框与非模态对话框的区别
- js入门(7)-计时器
- Find Minimum in Rotated Sorted Array II
- 旋转动画
- Oracle全文索引之五 测试
- C语言--判断一个字符串是否为另一个字符串的旋转
- Oracle全文索引之六 附:CONTAINS函数
- android studio编译报错finished with non-zero exit value 3
- SDNU 1033.采药 01背包 裸题
- 利用haseCode比较对象是否相同
- Android 按下Home之后再次点击应用图标
- CSS3 选择器—属性选择器
- 什么情况使用 weak 关键字,相比 assign 有什么不同?
- ???