1. 程式人生 > >C語言實現有一個字元陣列的內容為:"student a am i",請你將陣列的內容改為"i am a student"。

C語言實現有一個字元陣列的內容為:"student a am i",請你將陣列的內容改為"i am a student"。

//有一個字元陣列的內容為:"student a am i",請你將陣列的內容改為"i am a student"。

   要求:不能使用庫函式。               只能開闢有限個空間(空間個數和字串的長度無關)。

  解題思路:

                   1>先將"student a am i"轉變成"i ma a tneduts";

                   2> 再將"i ma a tneduts"轉變成"i am a student";

                   3> 將結果放在ret中輸出。

  原始碼:

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

//有一個字元陣列的內容為:"student a am i",
//			請你將陣列的內容改為"i am a student".
//			要求:
//			不能使用庫函式。
//			只能開闢有限個空間(空間個數和字串的長度無關)。

void Exchange1(char* left, char* right)
{
	char tmp = 0;
	while (left < right)
	{
		tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
void Exchange(char arr[])
{
	int len = strlen(arr);
	char* start = arr;
	char* end = NULL;
	char* ret = arr;
	//逆序整個字串
	Exchange1(arr, arr + len - 1);
	while (*arr)
	{
		start = arr;
		//判斷是否是一個單詞
		while ((*arr != ' ') && (*arr != '\0'))
		{
			arr++;
		}
		//找到空格
		end = arr - 1;
		//逆序單個單詞
		Exchange1(start, end);
		if (*arr == ' ')
		{
			arr++;
		}
	}
	printf("%s\n", ret);
}
int main()
{
	char arr[] = "student a am i";
	Exchange(arr);
	system("pause");
	return 0;
}

  執行結果: