字串的旋轉

2021-07-10 08:35:32 字數 1092 閱讀 1239

拜讀了july所寫的程式設計之法,收益良多,將學習過程中,編寫的書中練習題的答案貼出來,因為感覺自己想的可能還有不足,大家交流一下。

1.1字串的旋轉

單詞翻轉

輸入乙個英文句子,翻轉句子中單詞的順序。要求單詞內的順序不變,句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如,若輸入「i am a student.」則輸出「student. a am i」.

要完成上述功能需要兩個步驟:

①將整個字串整體翻轉,得到「.tneduts a ma i」;

②將每個單詞分別翻轉,及先要確定分割出單個孤立的單詞,用兩個標示start,end同時指向首位,當字元不是」 「(空格符)時,end++;若字元為」 「(空格符)則,翻轉字串start至end-1位,並將++end賦給start;迴圈往復直至字串為」\0」

原始碼

/*

字串的旋轉輸入乙個英文句子,翻轉句子中單詞的順序。要求單詞內字元順序不變,句子中的單詞以空格隔開。標點符號和普通字母一樣處理。例如,若輸入「i am a student.」則輸出「student. a am i」.

*/#include

void reverse_string(char* s, int n_start, int n_end);

//翻轉字串的n_strat至n_end位

int main()

else

}cout

<< sinput << endl;

cin.get();

return0;}

void reverse_string(char* str, int n_start, int n_end)

else}}

結果截圖

思考 對於字串的翻轉問題大概可以分為兩類:

①是類似與上題的整體的翻轉,可以使用多次翻轉的組合達成;

②是類似於移位翻轉,例如「abcdef」翻轉為「defabc」,使用三部翻轉法,時間複雜度為o(n),見《程式設計之法》——july

字串 字串的旋轉

時間複雜度為o m n 空間複雜度為o 1 include include include void leftshiftone char str,int n void leftrotatestring char str,int n,int m int main 輸出 before rotate ab...

字串旋轉

問題 把字串前面的若干個字元移動到字串的尾部。如把字串abcdef前2位字元移到後面得到字串cdefab。要求時間對長度為n的字串操作的複雜度為o n 輔助記憶體為o 1 看到大多數的帖子都是進行三次旋轉 如 個人感覺這思路確實比較新穎,但是總感覺有點麻煩了,個人思路如下 include inclu...

字串旋轉

字串的左旋轉操作 把字串前面的若干個字元移動到字串的尾部。例如 aabcd左旋乙個字元得到abcda aabcd左旋兩個字元得到bcdaa 同理字串右旋操作 aabcd右旋乙個字元得到daabc aabcd右旋兩個字元得到cdaab 那麼今天就來說一下字串旋轉中的一些問題 首先說一下簡單的,先用函式...