字符串位移包含问题
2016-04-05 21:40
309 查看
问题:
解答
完整代码如下所示:
代码分析:
关于bool数据类型:
由于c语言中没有bool数据类型,那么返回值 return true 或者 return false时都会报错。而且 bool main() 也会报错。
所以解决方法是:自定义bool类型。正如以上三行代码
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
注意:返回首次出现的地址是指在内存中的位置,而不是下标。
比如:
注意位移的算法。
先保留最前面一个字母到tempchar。
然后再循环把每个字母往前移一位
最后把tempchar的内容放到最后一个字母的位置
给定两个字符串s1和s2,要求判定s2是否能够被通过s1作循环位移(rotate)得到的字符串包含。例如,给定s1=AABCD和s2=CDAA,返回true; 给定s1=ABCD和s2= ACBD,返回false。
解答
完整代码如下所示:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define bool int #define false 0 #define true 1 bool main() { char src[] = "IBCD"; char dst[] = "BCD"; int len = strlen(src); for(int i=0; i<len; i++) { char tempchar = src[0]; for(int j=0; j<len-1; j++ ) { src[j] = src[j+1]; } src[len-1] = tempchar; if (strstr(src, dst)!=0) { printf("is ok\n"); return true; } } printf("is not ok!\n"); return false; }
代码分析:
关于bool数据类型:
#define bool int #define false 0 #define true 1
由于c语言中没有bool数据类型,那么返回值 return true 或者 return false时都会报错。而且 bool main() 也会报错。
所以解决方法是:自定义bool类型。正如以上三行代码
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
注意:返回首次出现的地址是指在内存中的位置,而不是下标。
比如:
char src[] = "IBCD"; char dst[] = "BCD"; int a = strstr(src, dst); printf("a=%d\n", a); //输出:a=1606416376而不是a=1;
注意位移的算法。
先保留最前面一个字母到tempchar。
然后再循环把每个字母往前移一位
最后把tempchar的内容放到最后一个字母的位置
相关文章推荐
- HTML基础练习
- HDU 4349(Lucas 变形)
- LeetCode(25)-symmetric tree
- LeetCode(25)-symmetric tree
- 折半查找的实现
- UITableView 的一些冷知识点
- 二叉搜索树的后序遍历序列
- java实现数据压缩的哈夫曼(Huffman)算法
- Dell服务器之RAID卡介绍及监控方法
- docker常用命令
- #1039 : 字符消除
- SpringMVC
- 利用爬虫获取豆瓣上可能喜欢的书籍
- JDK7浅解
- java swing 之 JScrollPane(滚动面板)的使用
- android日常 游戏:跳舞男孩
- POJ 1930 Dead Fraction(循环小数转换成分数)
- 循序渐进之Spring AOP(1) - 原理
- 第四周作业
- Java入门:基础算法之线性搜索