拜讀了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 那麼今天就來說一下字串旋轉中的一些問題 首先說一下簡單的,先用函式...