判断一个字符串是否为另外一个字符串旋转之后的字符串
2016-06-11 18:51
351 查看
判断一个字符串是否为另外一个字符串旋转之后的字符串。例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.AABCD左旋一个字符得到ABCDAAABCD左旋两个字符得到BCDAAAABCD右旋一个字符得到DAABCAABCD右旋两个字符得到CDAAB1、将左旋和右旋所有的情况列举出来,然后通过for循环不断进行比较,此法效率较低。代码如下:
例如:给定的一个字符串为ABCDE,经过拷贝后的字符串为ABCDEABCDE,观察这个字符串,能够发现给定的字符串ABCDE经过左、右旋的所有情况为字符串ABCDEABCDE的子串。
代码如下:
函数原型:extern char *strcat(char *dest,char *src)
参数说明:dest为一个目的字符串的指针,即被连接的字符串(在前),src为一个源字符串的指针(在后)。
所在库名:#include <string.h>
函数功能:把src所指字符串添加到dest结尾处实现字符串的连接,连接过程覆盖dest结尾处的'/0',该函数直到遇到'\0'才结束。
返回说明:src和dest所指内存区域不可以重叠,并且dest必须有足够的空间来容纳src的字符串返回指向dest的指针。
strncat函数
函数原型:extern char *strncat(char *dest,char *src,int n)
参数说明:src为源字符串,dest为目的字符串,n为指定的src中的前n个字符。
所在库名:#include <string.h>
函数功能:把src所指字符串的前n个字符添加到dest结尾处,覆盖dest结尾处的'/0',实现字符串连接。
返回说明:返回指针,连接后的字符串。
本文出自 “Scen” 博客,请务必保留此出处http://10741357.blog.51cto.com/10731357/1709703
#include<stdio.h> #include<string.h> #include<stdlib.h> void revolve(char str[],int left,int right) {//逆序字符串 while(left<right) { char temp=str[left]; str[left]=str[right]; str[right]=temp; left++; right--; } } int judge(char arr[],char str[],int len1,int len2) { int k,i; char p1[10]={0},p2[10]={0}; if(len1==len2) { for(k=0;k<len1;k++) { revolve(arr,0,len1-1); revolve(arr,len1-k,len1-1); revolve(arr,0,len1-k-1); for(i=0;i<len1;i++) { p1[i]=arr[i];//将左旋的字符串保存在数组p1中 } revolve(arr,0,len1-1); revolve(arr,0,k-1); revolve(arr,k,len1-1); for(i=0;i<len1;i++) { p2[i]=arr[i];//将右旋的字符串保存在数组p2中 } if((strcmp(p1,str)==0)||(strcmp(p2,str)==0)) //判断要比较的数组是不是另一个字符串左旋或右旋得到的结果 return 1; }return 0; } else return 0; } int main() { char arr[10]={0},str[10]={0}; int len1,len2,var; printf("请输入要判断的两个字符串:\n"); gets(arr); gets(str); len1=strlen(arr); len2=strlen(str); var=judge(arr,str,len1,len2);//返回值为var printf("%d\n",var); system("pause"); return 0; }2、根据左旋或右旋结果和原字符串的联系,可以将一个给定的字符串拷贝一份放在该字符串的后面得到新的字符串,只需要判断另一个字符串是不是组合的新字符串的子字符串就可以解决问题。
例如:给定的一个字符串为ABCDE,经过拷贝后的字符串为ABCDEABCDE,观察这个字符串,能够发现给定的字符串ABCDE经过左、右旋的所有情况为字符串ABCDEABCDE的子串。
代码如下:
#include<stdio.h> #include<string.h> #include<stdlib.h> char* my_strncat(char *dest,char *stc,int len) { char *cp=dest; while(*cp) cp++; while((*stc!='\0')&&(len--)) *cp++=*stc++; *cp='\0'; return dest; } int main() { char arr[20]={0}; char str[10]={0}; char *ret; printf("请输入要判断的两个字符串:\n"); gets(arr); gets(str); if(strlen(arr)==strlen(str))//判断两个字符串是否长度一样 { my_strncat(arr,arr,strlen(arr));//两个相同的字符串合并,注意此处不能用strcat函数 ret=strstr(arr,str);//strstr函数判断后面函数是不是前面函数的子字符串 if(ret!=NULL) printf("yes!\n"); else printf("no!\n"); } else printf("no!\n"); system("pause"); return 0; }strcat函数
函数原型:extern char *strcat(char *dest,char *src)
参数说明:dest为一个目的字符串的指针,即被连接的字符串(在前),src为一个源字符串的指针(在后)。
所在库名:#include <string.h>
函数功能:把src所指字符串添加到dest结尾处实现字符串的连接,连接过程覆盖dest结尾处的'/0',该函数直到遇到'\0'才结束。
返回说明:src和dest所指内存区域不可以重叠,并且dest必须有足够的空间来容纳src的字符串返回指向dest的指针。
strncat函数
函数原型:extern char *strncat(char *dest,char *src,int n)
参数说明:src为源字符串,dest为目的字符串,n为指定的src中的前n个字符。
所在库名:#include <string.h>
函数功能:把src所指字符串的前n个字符添加到dest结尾处,覆盖dest结尾处的'/0',实现字符串连接。
返回说明:返回指针,连接后的字符串。
本文出自 “Scen” 博客,请务必保留此出处http://10741357.blog.51cto.com/10731357/1709703
相关文章推荐
- 字符串和对应的整数之间的转换
- 编写一个函数itob(),将整数n转换为以b进制的数,保存到s中
- 二维数组中的查找—杨氏矩阵
- 编写一个函数将参数字符串中的字符反向排列
- 在终端输入多行信息,找出包含“ould”的行,并打印改行
- 编写冒泡排序,排序一个整形数组
- 模拟实现printf
- 调整数组使奇数全部都位于偶数前面
- 找出数组中两个只出现了一次的数
- 实现常用字符串处理函数(不调用库函数)
- strlen函数的多种实现方式
- 编写冒泡排序,可以排序整形数组,也可以排序字符串
- 实现一个简易通讯录
- 注释转换
- 排序算法比较
- 顺序表一系列操作
- 单链表的基本操作
- 【面试题】单链表的操作1
- 【面试题】单链表的操作2
- 复数类