1. 程式人生 > >"student a am i"變為'' i am a student"

"student a am i"變為'' i am a student"

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

思路: 兩個函式 1.字串逆置函式 2.計算字元長度函式 主函式中先直接可輸出student a am i 然後通過字串函式逆置輸出i ma a tneduts 再以空格之間連續字元進行逆置,最後輸出i am a student

# include <stdlib.h>
#include<stdio.h>
#include<assert.h>
int my_strlen(const char *p)      //自定義計算字串長度函式,使得p就指向字串a
{
	int count=0;             //定義count為字串長度
	assert(p != NULL);    //判斷指標變數是否為空
	count = 0;
	while(*p++)     //判斷字串是否遇到‘\0’
	{
	count++;        
	}
	return count;   //返回字串長度
}
void swap(char *left,char *right)      //自定義swap函式
{
assert(left !=NULL);      //判斷指標變數是否為空
assert(right !=NULL);
while(left<right)       //左地址小於右地址,則執行以下操作
	{
	char t = *left;
	*left = *right;
	*right = t;        //進行字串首末尾互換
	right--;           //末尾前移
	left++;         //首位後移
	}
}
int main()
{
	char a[] = "student a am i";        //定義字元型陣列並初始化
	char *p = a;                      //定義指標變數p指向a
	char *left = a;                  
	char *right = a;              
	printf("%s\n",a);             //輸出字串student a am i
	swap(p,p+my_strlen(a)-1);    //呼叫my_strlen函式計算字元長度串,再呼叫swap自定義函式逆置字串
	printf("%s\n",a);           //輸出字串i ma a tneduts
	while(*p)              //判斷字串是否遇到‘\0’ ,執行字串內部以2個空格所夾的字串逆置
	{
     while((*p != ' ')&&(*p != '\0'))   //判斷字串不等於空格,且不等於‘\0’,執行以下操作
	   {
	    right++;                  //在以上程式中right以指向首地址,讓它向後移動
	    p++;
	   }
       swap(left,right-1);   //呼叫swap函式,字串內部字元進行逆置
	if(*p)
	 {
		left = right+1;
		right = left;          //字串內部,向空格的下一個字元進行位置變化
	    p++;
	  }
	}
	printf("%s\n",a);       //輸出字串i am a student
	system ("pause");      //系統函式,防止執行結果快閃
	return 0;
	}


在這裡插入圖片描述