题目内容
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1
给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
题目解析
方法一:每旋转一个字符,就判断是否和输入的字符串相等。
#include <stdio.h>
#include <assert.h>
#include <string.h>
int stringrotation(char* str1, char* str2)
{
assert(str1 != NULL);
assert(str2 != NULL);
if (strlen(str1) != strlen(str2))//长度不一样就不是
{
return -1;
}
if (strcmp(str1, str2) == 0)//如果输入的字符串和原字符串相同就等于零
{
return 1;
}
int len = strlen(str1);
int i = 0;
int j = 0;
while (i < len)//旋转的次数进行n-1次
{
char tmp = *str1;
for (j = 0; j < len - 1; j++)
{
*(str1 + j) = *(str1 + j + 1);
}
*(str1 + len - 1) = tmp;
//判断
if (strcmp(str1, str2) == 0)
{
return 1;
}
i++;
}
return -1;
}
int main()
{
char arr1[100] = "ABCDEFG";
char arr2[50] = "";
scanf("%s", arr2);
int ret = stringrptation(arr1, arr2);
if (ret == 1)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
return 0;
}
方法二:将原字符串再来一遍接在后面,然后找一找待查找的字符串是不是两倍原字符串的子集即可。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int stringrotation(const char* arr1, char* arr2)
{
char tmp[256] = { 0 }; //用一个辅助空间将原字符串做成两倍原字符串
strcpy(tmp, arr1); //先拷贝一遍
strcat(tmp, arr1);//再连接一遍
return strstr(tmp, arr2) != NULL;//看看找不找得到
}
int main()
{
char arr1[100] = "ABCDEF";
char arr2[50] = "";
scanf("%s", arr2);
int ret = stringrotation(arr1, arr2);
if (ret == 1)
{
printf("YES\n");
}
两种方法中对一些函数进行了使用,防止小伙伴们对这些函数用法忘记,所以帮大家整理了一下。
1. assert() 断言函数,用于在调试过程中捕捉程序错误
void assert (int expression);
参数 expression 头文件 #include<assert.h>
要检测的表达式。如果表达式的值为 0,那么断言失败,程序终止执行;如果表达式的值为非 0,那么断言成功,assert() 不进行任何操作。
2.strlen()函数,返回字符串的长度
unsigned int strlen (char *s);
参数 s 为指定的字符串 头文件 #include<string.h>
strlen()用来计算指定的字符串s 的长度,不包括结束字符”\0″。
返回值,返回字符串s 的字符数。
3.strcmp()函数,比较字符串(区分大小写)
int strcmp(const char *s1, const char *s2);
参数 s1, s2 为需要比较的两个字符串 头文件#<string.h>
返回值,若参数s1 和s2 字符串相同则返回0。s1 若大于s2 则返回大于0 的值。s1 若小于s2 则返回小于0 的值。
4.strcpy()函数,字符串复制(拷贝)
char *strcpy(char *dest, const char *src)
参数 dest–指向用于存储复制内容的目标数组。src–要复制的字符串。
头文件 #include<stdlib>
返回值,该函数返回一个指向最终的目标字符串 dest 的指针。
5.strcat()函数,连接字符串
char *strcat(char *dest, const char *src)
参数 dest 为目的字符串指针,src 为源字符串指针 头文件:#include <string.h>
返回值, 该函数返回一个指向最终的目标字符串 dest 的指针。
6.strstr()函数,返回字符串中首次出现子串的地址
char *strstr( char *str, char * substr );
参数 str为要检索的字符串,substr为要检索的子串。 头文件 #include<string.h>
返回值,返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/91303.html