题目:

判断一个字符串是否为另外一个字符串旋转之后的字符串。 
例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.

AABCD左旋一个字符得到ABCDA 
AABCD左旋两个字符得到BCDAA

AABCD右旋一个字符得到DAABC


思路:把源字符串追加到源字符串后边,这样问题就转化成了查找字串。可以利用strstr函数来完成,但是这里一定要注意还要进行长度的判断,因为旋转过后的字符串长度与原来字符串长度应该是相等的。

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
int Judge_str(char*str, char*substr)
{assert(str);assert(substr);int ret;int len_str = strlen(str);int len_substr = strlen(substr);char*tmp = malloc(sizeof(char)*(2 * len_str + 1));if (tmp == NULL){printf("申请空间失败 !\n");exit(1);}strcpy(tmp, str);strncat(tmp, str, len_str);char*p = strstr(tmp, substr);//注意这里不能用tmp接收,因为如果查找到,则返回的是字串第一次出现的位置,而如果用tmp接收,则free(tmp)地址就变了,不是free掉原来开辟内存空间的起始地址处if (p&&len_substr == len_str)//这里一定要检测空间有没有开辟成功{ret = 1;}else{ret = 0;}free(tmp);return ret;
}int main()
{char str1[] = "AABCD";char str2[] = "BCDAU";int ret = Judge_str(str1, str2);if (ret == 1){printf("str2是str1旋转过后的串\n");}else{printf("str2不是str1旋转过后的串\n");}system("pause");return 0;
}

思路二:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
//左旋字符串
void Reverse(char*left, char*right)
{while (left < right){char tmp = *left;*left = *right;*right = tmp;left++;right--;}
}void Reverse_K(char*str, int k)
{int len = strlen(str);k %= len;//k有可能大于字符串的长度,但这也是合理的,相当于转了一圈,然后再移Reverse(str, str + len - 1);//整体翻转Reverse(str, str + len - 1 - k);//再翻转前半部分Reverse(str + len - k, str + len - 1);//翻转后半部分
}int IsLeftRotate(char*str1, char*str2)
{int ret;int len1 = strlen(str1);int len2 = strlen(str2);if (len1 != len2){return 0;}while (len1){Reverse_K(str1, 1);if (strcmp(str1, str2) == 0){return 1;}len1--;}return 0;
}int main()
{char str1[] = "ABCD";char*str2 = "BCDA";Reverse_K(str1, 3);int ret = IsLeftRotate(str1, str2);if (ret == 1){printf("str2是str1旋转过后的串\n");}else{printf("str2不是str1旋转过后的串\n");}system("pause");return 0;
}

判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.相关推荐

  1. C语言---写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串

    题目: 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串. #include <string.h> #include <stdio.h> void left_re ...

  2. 两种方法判断一个字符串是否为另外一个字符串旋转之后的字符串。(C语言)...

    例如:给定s1 = AABCD和s2 = BCDAA,返回1 给定s1 = abcd和s2 = ACBD,返回0. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 第一种: ...

  3. 字符串左旋问题及判断一个字符串是否由另一个字符串左旋得到

    字符串左旋问题 问题描述 左旋字符串中的k个字符.例如 ABCD左旋一个字符得到BCDA ,ABCD左旋两个字符得到CDAB 解法一:暴力破解法 先左旋一个字符 将字符串首个字符保存在temp中 字符 ...

  4. 判断一个字符串是否为另外一个字符串旋转之后的字符串。

    ★判断一个字符串是否为另外一个字符串旋转之后的字符串. 例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0. AABCD左旋一个字符得到ABCDA ...

  5. java检查两个字符串是否包含,java判断一个字符串是否包含另外一个字符串,java另外一个,要检查一个字符串是否包含...

    java判断一个字符串是否包含另外一个字符串,java另外一个,要检查一个字符串是否包含 要检查一个字符串是否包含另外一个字符串需要使用indexOf()方法,如果indexOf方法返回大于等于0的值 ...

  6. Java 中判断一个字符串是否包含另外一个字符串的方法

    方法一:indexOf(String s) 可以配合indexOf(String s)的使用,如果包含,返回的值是包含该子字符串在父类字符串中起始位置:如果不包含必定全部返回值为-1 public v ...

  7. C 判断一个字符串是否包含另一个字符串

    如何判断一个字符串是否包含另一个字符串? 思路:从一个字符串中提取出可能与另一个字符串相同的部分,再进行比较. 代码: #include <stdio.h> #include <st ...

  8. c语言编程判断输入的一个字符串是否是“回文”。所谓“回文”字符串就是左读和右读都一样的字符串。例如: “abcba“就是一个回文字符串。

    编程判断输入的一个字符串是否是"回文".所谓"回文"字符串就是左读和右读都一样的字符串.例如: "abcba"就是一个回文字符串. 要求:先 ...

  9. java字符串中包含_怎么判断一个字符串是否包含另一个字符串

    第一步骤:判断一个字符串是否包含另一个字符串. 1.思路整理 首先我们可以借助于java中String类提供的indexOf方法 2.代码如下 public class TestString { pu ...

最新文章

  1. python创建一个有序链表_算法2-2:生成递增有序链表+两个链表合并
  2. VSCode摸鱼插件 — FreeWindow
  3. HTML day02
  4. jquery报变量没定义错误的原因
  5. Confluence 6 升级以后
  6. 遍历集合的两种方式:迭代器和增强型for循环
  7. 基于libmemcached为php扩展memcached服务
  8. 如何修改vue打包的名字_教你如何修改Mac的电脑名字
  9. 如何构建NTP时间服务器
  10. sql server 性能调优之 资源等待PAGEIOLATCH
  11. 佳能g2810打印机扫描怎么用_佳能 G2810说明书.pdf
  12. Python3爬取起点中文网阅读量信息,解决文字反爬~~~附源代码
  13. java 离线版语音转文字
  14. (Python编程)稳定的copra算法(copra-ep)
  15. 申请Apple ID
  16. 【python】wxpy--微信接口库
  17. 平面设计学费,平面设计学费大概多少:夏雨老师
  18. python 时间表_python获取起止日期段中的时间列表
  19. 寻找指定长度以内的最短连续子段和
  20. 【Acwing并查集】238. 银河英雄传说

热门文章

  1. 程序员未来的三大出路
  2. 首届.NET Core开源峰会 2018年5月20日
  3. Android中使用Picasso将图片直接转换为圆形
  4. springboot整合minio上传文件
  5. CentOS 6.5配置国内Yum源2016年8月1日更新
  6. 电脑开机只显示计算机界面,笔记本电脑进不了桌面?开机只显示BIOS界面?
  7. Django项目后端实现注册功能---短信验证码(容联云)。
  8. ​当我谈我的自行车时,我谈些什么
  9. matlab 图中lengend换行
  10. 绿色和平发布IT企业环保排名