写一个函数,判断这个字符串是否为另一个字符串旋转之后的字符串

字符串左旋的定义:

给定字符串arr[] = "abcdef";

整形k ;

k = 1时字符串变为:bcdefa

k = 2时字符串变为:cdefab

...

穷举法解题思路: 

给出两个字符串求左旋是否相等,首先左旋其中的一个数组,每旋转一次判断一次是否相等,相等返回1,反之返回0。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>

int FlipCheck(char* arr1, char *arr2, int size)
{
	int i = 0;
	for (i = 0; i < size; i++)                //循环遍历数组arr1
	{
		char tmp = *arr1;                     //将arr1此时首元素取出
		int j = 0;
		for (j = 0; j < size - 1; j++)        
		{
			*(arr1 + j) = *(arr1 + j + 1);    //将第j + 1位元素的值赋给第j位元素
		}
		*(arr1 + j) = tmp;                    //将刚才取出的值赋给最后一个元素
		if (strcmp(arr1, arr2) == 0)          //如果此时两个字符串相等返回1
		{
			return 1;
		}
	}
	return 0;                                 //循环全部结束找不到返回0
}

int main()
{
    char arr1[10] = "abcdef";
	char arr2[10] = "cdefab";
	int size = strlen(arr1);
	if (FlipCheck(arr1, arr2, size))      //FlipCheck返回1输出Found it,否则输出Not found
		printf("Found it\n");
	else
		printf("Not found\n");
	return 0;
}

追加法解题:

在arr1字符串后面追加一个arr1字符串,在新的arr1字符串中查找是否有子字符串arr2。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>

int FlipCheck(char* arr1, char *arr2)
{
    if (strlen(arr2) != strlen(arr1))     //字符串长度不相等返回0
		return 0;

	strncat(arr1, arr1, strlen(arr1));    //追加字符串

    return strstr(arr1, arr2) != NULL;    //寻找子字符串,若不为空返回1,反之返回0。                          
}

int main()
{
	char arr1[20] = "abcdef";             //因为需要追加字符串,所以定义时需多分配空间
	char arr2[10] = "cdefab";
	
	if (FlipCheck(arr1, arr2))            //FlipCheck返回1输出Found it,否则输出Not found
		printf("Found it\n");
	else
		printf("Not found\n");

	return 0;
}

这里不能使用strcat函数,因为strcat函数不能自己追加给自己,需要使用strncat函数

strncat函数定义:

char *strncat( char *strDest, const char *strSource, size_t count );

*strDest 是目标字符串地址,

*strSource 是资源字符串地址(也可以是常量字符串)

count 是需要追加的字符个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KamikazePilot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值