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".  要求:  不能使用庫函式。  只能開闢有限個空間(空間個數和字串的長度無關)。 

思路:

用指標指向起點尾點:

整體逆轉:起點為字串的第一個字元,尾點為字串的最後一個字元

子串:找到子串的起點和尾點

程式實現

#include<stdio.h>
#include<stdlib.h>
int  strlen(char* str){
	int count = 0;
	while (*str){
		count++;
		str++;
	}
	return count;
}
void reverse_str(char* left, char* right){
	while (left < right){
		char temp = *left;
		*left = *right;
		*right = temp;
		left++;
		right--;
	}
}
void reverse(char* str){
	char* left = str;
	char* right = str + strlen(str) - 1;
	char* cur = str;
	//整體逆轉
	reverse_str(left, right);
	//子串逆轉,區域性逆轉
	while (*cur){
		//當前子串的起點
		char* start = cur;
		//獲取當前子串尾點的下一個位置
		while ((*cur != ' ') && (*cur != '\0')){
			cur++;
		}
		//逆轉子串
		reverse_str(start, cur - 1);
		if (*cur == ' '){
			cur++;
		}
	}
}
int main(){
	char str[] = { "student am i" };
	printf("%s\n", str);
	reverse(str);
	printf("%s\n", str);
	system("pause");
	return 0;
}