1. 程式人生 > >NO.28 ---- C語言入門練習23

NO.28 ---- C語言入門練習23

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
// 有一個字元陣列的內容為:“student a am i”,
// 請你將陣列的內容改為"i am a student".
// 要求:
// 不能使用庫函式。
// 只能開闢有限個空間(空間個數和字串的長度無關)。
//
// student a am i
// i ma a tneduts
// i am a student

// 由於不能使用庫函式,所以需要先寫一個函式來求字串的長度

int mystrlen(const char* str)
{
int count = 0;
while (*str != '\0')
{
	count++;
	str++;
}

return count;

}

// 該函式用於實現翻轉

void reverse(char *left, char *right)
{

while (left < right)
{
	char temp = *left;
	*left = *right;
	*right = temp;
	left++;
	right--;
}
}

void reverse_str(char *str, int sz)
{

char *str1 = str;
char *left = str;
char *right = str + sz - 1;
reverse(left, right);         //	先將字串整體反轉
while (*str1)
{
	left = str1;
	while ((*str1 != '\0') && (*str1 != ' ')) //	找到單詞,此處一定要加(*str1 != '\0')條件限制,
		//	因為找到最後一個單詞的時候,*str1永遠也不為空格
	{
		str1++;
	}
	right = str1 - 1;               //		此時str1指向單詞後方的空格,需要減一方能指向單詞的最後一個字母
	reverse(left, right);               //	繼整體反轉後再次反轉單詞,能使單詞拼寫順序恢復過來
	if (*str1 == ' ')             //	等於空格讓指標後移一位否則不能參與下次迴圈。
	{
		str1++;
	}
}
}

int main()
{
char arr[ ] = "student a am i";
int sz = mystrlen(arr);

printf("移動完成後為:");
reverse_str(arr, sz);
printf("%s\n", arr);



system("pause");
return 0;
}

執行結果:在這裡插入圖片描述