字符串左旋问题

题目1

字符串左旋
实现一个函数,可以左旋字符串中的k个字符。
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB

思路分析
创建一个临时变量用来存放字符串的第一个字符,利用for循环遍历字符串,实现将后一位赋值给前一位,最后将第一个字符赋值给最后一个元素即可。
字符串左旋问题_第1张图片

代码实现

//实现一个函数,可以左旋字符串中的k个字符。
void leftturn(char* str,int length,int k) {
     
	//循环实现 字符左旋
	for (int i = 0; i < k; i++) {
     
		int n = 0;
		//使用临时变量储存第一个字符
		char tmp = str[0];
		//遍历数组,实现将后一位赋值给前一位
		for (int n = 0; n < length - 1; n++) {
     
			str[n] = str[n + 1];
		}
		//实现第一字符赋值给最后一个元素
		str[length-1] = tmp;
	}
}
int main() {
     
	char str[] = "abcd";
	int length = strlen(str);
	int k = 0;
	printf("请输入左旋字符的个数:");
	scanf("%d", &k);
	printf("before:%s\n", str);
	leftturn(str,length,k);
	printf("after:%s\n", str);
	system("pause");
	return 0;
}

代码过程分析
字符串左旋问题_第2张图片

题目2

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

思路分析

这道题在上一道题的基础上,增加了字符串旋转结果的判断,可以创建一个判定函数Judge,循环调用左旋和右旋函数,来判定每次循环结果的字符串是不是和str相等,若是我们要找的find,则返回1即可~

代码实现

//左旋k个字符函数
void leftTurn(char* str,int length,int k) {
     
	for (int i = 0; i < k; i++) {
     
		int n = 0;
		char tmp = str[0];
		for (int n = 0; n < length - 1; n++) {
     
			str[n] = str[n + 1];
		}
		str[length-1] = tmp;
	}
}
 //右旋k个字符函数
void rightTurn(char* str, int length, int k) {
     
	for (int i = 0; i < k; i++) {
     
		int n = 0;
		char tmp = str[0];
		for (int n = 0; n < length - 1; n++) {
     
			str[n] = str[n + 1];
		}
		str[length - 1] = tmp;
	}
}
//比较 两字符串是否符合要求
int judge(char* str, char* find) {
     
	int length1 = strlen(str);
	int length2 = strlen(find);
	//两个字符串长度不同,直接返回0
	if (length1 != length2) {
     
		return 0;
	}
	//使用循环 调用 左旋右旋函数,得到每一次变化的结果
	for (int i = 0; i < length1; i++) {
     
		leftTurn(str, length1, i);
		if (strcmp(str, find) == 0) {
     
			return 1;
		}
		rightTurn(str, length1, i++);
		if (strcmp(str, find) == 0) {
     
				return 1;
		}
	}
	return 0;
}
int main() {
     
	char s1[] = "AABDC";
	char s2[] = "BCDAA";
	printf("%s\n%s\n", s1, s2);
	int ret=judge(s1, s2);
	printf("%d\n", ret);
	system("pause");
	return 0;
}

补充说明

调用strcmp函数,需要包含头文件
strcmp函数的原型是:int strcmp(const char * str1,const char * str2)
strcmp是比较两个字符串是否相等,此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续往下比对,直到字符不同或到达终止的空字符为止

返回值 表示
<0 第一个不匹配的字符在str1中的值比在str2中的值低
0 两个字符串的内容相等
>0 第一个不匹配的字符在str1中的值大于在str2中的值

你可能感兴趣的:(C,c语言,字符串左旋问题)