1. 程式人生 > >C語言實現判斷一個字元竄是否為另外一個字串旋轉之後的字串

C語言實現判斷一個字元竄是否為另外一個字串旋轉之後的字串

 //判斷一個字元竄是否為另外一個字串旋轉之後的字串

   例如:給定s1 = AABCD和s2 = BCDAA,返回1,給定s1 = abcd和s2 = ACBD,返回0.               // AABCD左旋一個字元得到ABCDA               // AABCD左旋兩個字元得到BCDAA               // AABCD右旋一個字元得到DAABC

  解題思路:

                  1> 首先需要一個旋轉字串的函式、判斷字串是否相等的函式和交換字元的

                       函式;

                  2> 實現旋轉:根據你要旋轉字元的個數迴圈幾次,再通過迴圈交換字元的順序;

                  3> 實現判斷:判斷兩個字串是否相等需要判斷每個字元是否相等,若有一個

                       不相等,返回0,否則返回1;

                  4> 程式碼完成,輸出返回值。

  原始碼:

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

//2.判斷一個字串是否為另外一個字串旋轉之後的字串。
//例如:給定s1 = AABCD和s2 = BCDAA,返回1,給定s1 = abcd和s2 = ACBD,返回0.
//
//AABCD左旋一個字元得到ABCDA
//AABCD左旋兩個字元得到BCDAA
//
//AABCD右旋一個字元得到DAABC

//交換字串中的字元
void Swap(char* x, char* y)
{
	char tmp =*x;
	*x = *y;
	*y = tmp; 
}

//旋轉字串中的字元
char* LeftMove(char arr1[])
{
	int num = 0;
	int len = strlen(arr1);
	printf("請輸入你想要左旋的個數:");
	scanf("%d", &num);
	for (int i = 0; i < num; i++)
	{
		for (int j = 0; j < len - 1; j++)
		{
			//交換字串的首字元和第二個字元,依次交換後面的
			Swap(&arr1[j], &arr1[j + 1]);
		}
	}
	return arr1;
}

//判斷兩個字串是否相等
int Exchange(char* arr1, char* arr2)
{
	int i = 0;
	int len = strlen(arr1);
	for (i = 0; i < len; i++)
	{
		if (arr1[i] != arr2[i])
		{
			return 0;
		}
	}
	return 1;
}
int main()
{
	char arr1[] = { "AABCD" };
	char arr2[] = { "BCDAA" };
	int len = strlen(arr1);
	//旋轉字串
	LeftMove(arr1);
	//比較字串是否相等
	printf("%d\n", Exchange(arr1, arr2));
	system("pause");
	return 0;
}

執行結果:

                不等:                                                   相等: