C_2022_01_16 数组指针

一、

作业标题

字符串旋转结果

作业内容

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

例如:

给定s1 =AABCD和s2 = BCDAA,返回1

给定s1=abcd和s2=ACBD,返回0.

AABCD左旋一个字符得到ABCDA

AABCD左旋两个字符得到BCDAA

AABCD右旋一个字符得到DAABC

//方法一
int LRound(char* str1, char* str2, int len)    //左旋遍历一次后,字符串所有的可能形式已经包含,不需要再右旋
{
	int i = 0;
	int j = 0;
	int ret = 0;
	char temp = 0;
	for (j = 0; j < len; j++)
	{
		for (i = 0; i < len - 1; i++)
		{
			temp = str1[i];
			str1[i] = str1[i + 1];
			str1[i + 1] = temp;
		}
		if (strcmp(str1, str2) == 0)
		{
			return 1;
		}
	}
	return 0;
}

int main()
{
	int i = 0;
	int j = 0;
	int n = 0;
	int len = 0;
	int ret = 0;
	char str1[100] = { 0 };
	char str2[100] = { 0 };
	printf("请输入原字符串:\n");
	gets(str1);
	printf("请输入要比较的字符串:\n");
	gets(str2);
	len = strlen(str1);
	ret = LRound(str1, str2, len);
	if (ret)
	{
		printf("%d", ret);
		return 0;
	}
	else
	{
		printf("%d", ret);
		return 0;
	}
	return 0;
}



//方法二
int main()
{
	int i = 0;
	int ret = 0;
	int* p = NULL;
	char str1[100] = { 0 }; 
	char str2[100] = { 0 };
	char str3[200] = { 0 };
    printf("请输入原字符串:\n");        //例如AABCD
	gets(str1);
	printf("请输入要比较的字符串:\n");  //例如BCDAA
	gets(str2);
	strcpy(str3, str1);                 //先拷贝一遍,str3=AABCD
	strcat(str3, str1);                 //再连接一遍,str3=AABCDAABCD,这样AABCD不管左旋还是 
                                        //右旋的所有可能都已包含在AABCDAABCD的子集中
	p = strstr(str3, str2);             //返回指向 str3 中第一次出现str2的指针,如果str2不 
                                        //是str3的一部分,则返回空指针。匹配过程不包括终止的 
                                        //空字符,但它会停在那里
	if (p == NULL)
	{
		printf("0\n");
	}
	else
	{
		printf("1\n");
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值