赞
踩
题目:写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1
给定s1=abcd和s2=ACBD,返回0
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
简单介绍一下下面需要用到的函数:
strcmp函数
strcmp 是 C 语言标准库函数之一,用于比较两个字符串。其原型定义在 <string.h> 头文件中。strcmp 函数比较两个字符串 s1 和 s2,它逐个字符地比较 ASCII 值,直到遇到一个不同的字符或者达到字符串的结尾。
函数原型如下:
int strcmp(const char *s1, const char *s2); //参数说明: //s1: 指向要比较的第一个字符串的指针。 //s2: 指向要比较的第二个字符串的指针。 //返回值: //如果 s1 和 s2 字符串相等,返回 0。 //如果 s1 小于 s2,返回小于 0 的值。 //如果 s1 大于 s2,返回大于 0 的值。 //具体返回值的细节取决于实现,通常是第一个不匹配字符在 s1 中的 ASCII 值减去在 s2 中的 ASCII 值。
strstr函数
strstr 函数是 C 语言标准库函数之一,用于在字符串中查找子串。其原型定义在 <string.h> 头文件中。strstr 函数会搜索字符串 haystack 中第一次出现字符串 needle 的位置。
函数原型如下:
char *strstr(const char *haystack, const char *needle); //参数说明: //haystack: 指向要搜索的字符串的指针。 //needle: 指向要查找的子串的指针。 //返回值: //如果 needle 是 haystack 的一个子串,则返回指向 haystack 中 needle 第一次出现的指针。 //如果 needle 不是 haystack 的子串,则返回 NULL。 //如果 needle 是一个空字符串(即 *needle == '\0'),则返回 haystack。
解法1:可以参考字符左旋中的解法
这里将每次旋转的值记录在数组中,与另一个字符串比较。
代码如下:
- int leftRound(char* str1, char* str2)
- {
- int i = 0;
- int len = strlen(str1);
- for (i = 0; i < len; i++)
- {
- int j = 0;
- int temp = str1[0];
- for (j; j < len - 1; j++)
- {
- str1[j] = str1[j + 1];
- }
- str1[j] = temp;
- if (strcmp(str1, str2) == 0)
- return 1;
- }
- return 0;
- }
运行图:
解法2: 将原字符串再来一遍接在后面,然后找一找待查找的字符串是不是两倍原字符串的子集即可。
代码如下:
- int findStr(char* str1,char* str2)
- {
- int temp[40] = { 0 };
- strcpy(temp, str1);//将str1复制到temp数组
- strcat(temp, str1);//temp数组后接上str1数组,即为2个str数组拼接
- return strstr(temp, str2) != NULL;//查找str2是否为字串,若是则返回1,不是则返回0
- }
运行图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。