判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.

判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.

AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA

AABCD右旋一个字符得到DAABC

思路:测出从键盘接收的字符串的长度,每次对第一个字符串左移一位,每左移一位与第二个字符串进行比较,若相等则记下并跳出循环;若不相等则继续左移并进行比较,直到左移位数与字符串长度相等

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int Isleft() {
	char s1[100] = { '\0' }, s2[100] = { '\0' };
	printf("请输入字符串s1:\n");
	scanf("%s", s1);
	printf("请输入字符串s2:\n");
	scanf("%s", s2);
	int length = strlen(s1);    
	int n = length;     
	int a = 0;    //标志变量,等于1相等,0不想等
	while (n > 0) {                 //至多左移length位
		char c = s1[0];
		for (int i = 0; i < length - 1; i++) {
			s1[i] = s1[i + 1];
		}
		s1[length - 1] = c;
		if (strcmp(s1, s2) == 0) {        //判断左移一位之后的字符串是否与第二个字符串相等
			a = 1;                                //若相等则a=1,并跳出
			break;
		}
		n--;
	}
	return a;
}
int main() {
	int check = Isleft();
	if (check == 0) {
		printf("s2不是s1旋转之后的字符\n");
	}
	else {
		printf("s2是s1旋转之后的字符\n");
	}
	system("pause");
	return 0;
}

测试结果
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值