判断一个字符串是否为另一个字符串旋转之后的字符串
2015-11-02 19:14
363 查看
----------------------------------------------------------------------------------------------------
例如,源字符串src为:abcde 目标字符串dst为:bcdea 要想判断dst是否是经过src旋转得到,可以用左旋或者右旋来判断,此时,将src左旋一个字符即可得到dst字符串。这个问题我们其实可以转化为判断一个字符串是否为另一个字符串的子字符串,第一步,将src原字符串复制粘贴到src的后边,此时的src为:abcdeabcde,字符串bcdea明显为src的子字符串。这样,问题就好解决了。
----------------------------------------------------------------------------------------------------
C语言代码:
------------------------------------------------------------------------------------------
干货小知识:字符串函数strlen()计算字符串的有效长度,不包含‘\0’。
------------------------------------------------------------------------------------------
例如,源字符串src为:abcde 目标字符串dst为:bcdea 要想判断dst是否是经过src旋转得到,可以用左旋或者右旋来判断,此时,将src左旋一个字符即可得到dst字符串。这个问题我们其实可以转化为判断一个字符串是否为另一个字符串的子字符串,第一步,将src原字符串复制粘贴到src的后边,此时的src为:abcdeabcde,字符串bcdea明显为src的子字符串。这样,问题就好解决了。
----------------------------------------------------------------------------------------------------
C语言代码:
# include <stdio.h> # include <stdlib.h> # include <string.h> # include <assert.h> # define MAX 50 int Compare(char *pstr, char *parr) { assert(pstr); assert(parr); int count; int length = strlen(parr); //按顺序依次比较 while (*parr) { count = 0; while(*pstr != *parr && *pstr != '\0') { pstr++; } while (*pstr == *parr) { count++; if (count == length) { return 1; } pstr++; parr++; } parr++; } //逆序依次比较 parr = (parr + length - 1); while (length) { count = 0; while (*pstr != *parr && *pstr != '\0') { pstr++; } while (*pstr == *parr) { count++; if (count == length) { return 1; } pstr++; parr--; } length--; } return 0; } int main() { char str[MAX] = "abcdef"; char arr[MAX] = ""; int ret = 0; //str:abcdefabcdef fedcba strcat(str, "abcdef"); printf("请输入要比较的字符串:"); scanf("%s",arr); ret = Compare(str,arr); if (1 == ret) { printf("该字符串可以由源字符串旋转得到\n"); } else { printf("该字符串无法由源字符串旋转得到\n"); } system("pause"); return 0; }
------------------------------------------------------------------------------------------
干货小知识:字符串函数strlen()计算字符串的有效长度,不包含‘\0’。
------------------------------------------------------------------------------------------
相关文章推荐
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- 在C语言中转换时间的基本方法介绍
- C语言进制转换代码分享