最近在学习编程,跟着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;
}
记录一下,这是我的第一篇博客,写的有很多问题,望各位大佬批评指正