1. 程式人生 > >妙計旅行一面試題:字符串反轉

妙計旅行一面試題:字符串反轉

false 反向 col 大於 div inpu ace 輸出字符串 字符串

字符串反序

根據輸入的字符串,遇到空格或者到字符串末尾,都要進行反轉。即只進行單詞之內的反轉。
例如 This is a macbook -> sihT si a koobcam。
要去:時間復雜度 On

當時面試的時候,一臉懵逼,所以題目做的一塌糊塗。現在又到了要找工作的時間段了,再看到這個題,突然有了眉目。

解題思路:
循環遍歷輸入的字符串,在遇到空格或者字符串結尾時,對剛才遍歷的單詞反向寫入輸出字符串。在循環沒有到輸入字符串末尾時,每個單詞反向寫入之後添加空格。

具體的代碼:
 1 bool reverse(const char* input, char* output)
 2 {
3 if (nullptr == input || nullptr == output) 4 { 5 return false; 6 } 7 8 char sep = ; 9 size_t index = 0; 10 size_t size = strlen(input); 11 for (size_t i = 0; i < size; ++i) 12 { 13 // 遇到空格或者字符串末尾,才會進行下一步的反轉字符串 14 if (input[i] != sep && i != size - 1
) 15 { 16 continue; 17 } 18 19 // 遇到空格,從空格前一個字符開始反向遍歷 20 // 到字符串末尾,從當前位置開始反向遍歷 21 // 反向遍歷的終止是到字符串開始或者遇到空格,這個for循環的下表j的類型不能是size_t 22 for (int j = (i == size - 1) ? i : i - 1; (j >= 0) && input[j] != sep; --j) 23 { 24 output[index++] = input[j];
25 } 26 27 // 不是字符串末尾時,要在輸出字符串末尾添加空格 28 if (i != size - 1) 29 { 30 output[index++] = sep; 31 } 32 } 33 return true; 34 }

註意??:使用這個函數,輸出字符串的長度需要自己定,要保證的是輸出字符串的長度大於等於輸入字符串的長度。

妙計旅行一面試題:字符串反轉