以單詞為單位反轉字串,要求不申請任何空間

2021-05-26 01:42:18 字數 1497 閱讀 3087

問題描述:

存在乙個可讀寫的字串,其中包括若干單詞,單詞間以空格區分,要求以單詞為單位對字串進行反轉。

演算法思想:

(1)利用異或運算可以進行不申請空間進行字元交換

(2)利用遞迴的思想

(3)使用strchr函式區分單詞

解決方案:

(1)利用遞迴和異或運算進行字元交換,這一步將完成字串的整體反轉

// 遞迴進行字元交換

void recursive_swap_char(char* lhs, char* rhs)

(2)逐個對字串內的單詞進行反轉,則完成以單詞為單位的反轉

// 遞迴進行單詞中字元反轉

void recursive_word_reverse(char* cur, char* next)

// 當前單詞內進行字元反轉

recursive_swap_char(cur, next - 1);

// 反轉下乙個單詞

recursive_word_reverse(next + 1, strchr(next + 1, ' '));

}

完整**:

#include #include using namespace std;

// 遞迴進行字元交換

void recursive_swap_char(char* lhs, char* rhs)

// 遞迴進行單詞中字元反轉

void recursive_word_reverse(char* cur, char* next)

// 當前單詞內進行字元反轉

recursive_swap_char(cur, next - 1);

// 反轉下乙個單詞

recursive_word_reverse(next + 1, strchr(next + 1, ' '));

}char* reverse_by_word(char* src)

void print(char* src)

int _tmain(int argc, _tchar* argv)

執行結果:

附註:

(1)在網上搜到過別的同學的解法,反轉字串時採用結尾字元('/0')逐次前進的操作,即不斷呼叫strlen,或者移位,或者加法運算,同時遞迴。而這裡採用快速排序的思想,進行前後兩個指標相互靠攏進行字元交換的遞迴呼叫,由於是在乙個字串進行操作,因而利用了指標的比較操作是有意義的。

(2)這裡使用的是單詞間只有乙個空格,並且最後乙個單詞後沒有空格。可能也會出現單詞間有多個空格的情況,解法就需要計算空格的個數,同樣可以通過strchr函式實現。

輸入字串以單詞為單位進行反轉

2.實現乙個方法,輸入字串以單詞為單位進行反轉,例如i like you 反轉為you like i,不可使用string等 char reverse char input package com.leetcode 轉換字串中單詞的順序 輸入 the sky is blue 輸出 blue is s...

反轉字串, 以單詞反轉句子

給乙個字串,將其按照單詞順序進行反轉。比如說 the sky is blue 那麼反轉就是 blue is sky the 反轉字串 fileprivate func reverse chars inout t start int,end int 反轉句子,以單詞反轉 func reversewor...

字串反轉,單詞反轉

一 字串反轉,共蒐集了 7 種方法 public class stringreversed public static void reverse1 string s char c s.tochararray 方法二 for int i 0 i s.length 2 i for char l c sy...