經典面試題(1)
阿新 • • 發佈:2018-12-18
將一個字元陣列的內容為:“student a am i”改為“i am a student”
要求: 1. 不能使用庫函式; 2.只能開闢有限個空間(空間個數和字串的長度無關)。
演算法思路:先將字元陣列"student a am i"逆置變為"i ma a tneduts",然後在將字元陣列"i ma a tneduts"裡邊的每一個單詞逆置變為"i am a student". 程式碼如下:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<assert.h> static int my_strlen(const char *str) { int count = 0; while (*str) { count++; str++; } return count; }//求字串長度 static void reverse_arr(char*left, char*right) //因為這個函式只能在下一個函式中呼叫,加上static改變其連結屬性,讓函式更安全 { while (left < right) { char temp = *right; *right = *left; *left = temp; left++; right--; } }//逆置一個數組 void reverse(char *str) { assert(str != NULL); char *left = str; char *right = str + my_strlen(str) - 1; char *cur = str; reverse_arr(left, right); while(*cur) { char *start = cur; while ((*cur != ' ') && (*cur != '\0')) { cur++; } reverse_arr(start, cur - 1); //找到每一個單詞,然後逆置 if (*cur == ' ') { cur++; } } } int main() { char arr[] = "student a am i"; reverse(arr); printf("%s\n", arr); system("pause"); return 0; }