有一個字元陣列的內容為:"student a am i", 請你將陣列的內容改為"i am a student".
阿新 • • 發佈:2018-12-19
有一個字元陣列的內容為:"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; }