最近在学习编程,跟着B站一起在学习,讲了一个字符串旋转的问题,想写个博客记录一下,下面是这个题的题目。
题目内容:
实现一个函数,可以左旋字符串中的k个字符
例如:
ABCD左旋一个字符得BCDA
ABCD左旋两个字符得CDAB
判断一个字符串是否是由另一个字符串旋转得到的
因为我是初学者,所以一开始自己写的代码比较low,希望大家不要见笑
#include<stdio.h>
#include<string.h>
#include<assert.h>
int is_reverse(char* str1, char* str2)
{
int len = strlen(str1);
strcat(str1, str1);
for (int i = 0;i < len;i++)
{
int count = 0;
for (int j = i;j < len + i;j++)
{
if (*(str1 + j) == *(str2 + j - i))
{
count++;
}
}
if (count == len)
{
return 1;
}
}
return 0;
}
int main()
{
char ch1[100];
char ch2[100];
scanf_s("%s", ch1, sizeof(ch1));
scanf_s("%s", ch2, sizeof(ch2));
int ret=is_reverse(ch1, ch2);
if (ret == 1)
{
printf("是经过旋转得到的\n");
}
else if (ret == 0)
{
printf("不是经过旋转得到的\n");
}
getchar();
getchar();
return 0;
}
后来听老师讲解,对以上代码进行了一些改进。
#include<stdio.h>
#include<string.h>
#include<assert.h>
int is_reverse(char* str1, char* str2)
{
assert(str1);
assert(str2);
if (strlen(str1) != strlen(str2))
{
return 0;
}
int len = strlen(str1);
strncat(str1, str1,strlen(str1));//比较规范
strstr(str1, str2);
if (str2 != NULL)
{
return 1;
}
return 0;
}
int main()
{
char ch1[100];
char ch2[100];
scanf_s("%s", ch1, sizeof(ch1));
scanf_s("%s", ch2, sizeof(ch2));
int ret=is_reverse(ch1, ch2);
if (ret == 1)
{
printf("是经过旋转得到的\n");
}
else if (ret == 0)
{
printf("不是经过旋转得到的\n");
}
getchar();
getchar();
return 0;
}
记录一下,这是我的第一篇博客,写的有很多问题,望各位大佬批评指正
本文介绍了一种判断一个字符串是否可以通过旋转另一个字符串获得的方法。通过两段C语言代码对比,展示了从初学者到理解更高效实现的过程。
506





