問題:如何從磁碟檔案中讀取字串兒,然後按行將其倒序輸出?
下面一段材料取自陳壽《三國志》卷三十五諸葛亮傳,我把它分成了10段,現在要求從磁碟檔案中讀取這段文字,然後按照一定的規則倒序輸出。比如說,如果我要求輸出3行,系統會依次輸出第10、9、8三行;如果我要求輸出20行,則系統會依次輸出10、9、8 ... 3、2、1行;如果我要求輸出0行,則系統什麼也不做。
(01) 自董卓已來,豪傑並起,跨州連郡者不可勝數。
(02) 曹操比於袁紹,則名微而眾寡,然操遂能剋紹,以弱為強者,非惟天時,抑亦人謀也。
(03) 今操已擁百萬之眾,挾天子而令諸侯,此誠不可與爭鋒。
(04) 孫權據有江東,已歷三世,國險而民附,賢能為之用,此可以為援而不可圖也。
(05) 荊州北據漢、沔,利盡南海,東連吳會,西通巴、蜀,此用武之國,而其主不能守,此殆天所以資將軍,將軍豈有意乎?
(06) 益州險塞,沃野千里,天府之土,高祖因之以成帝業。
(07) 劉璋暗弱,張魯在北,民殷國富而不知存恤,智能之士思得明君。
(08) 將軍既帝室之胄,信義著於四海,總攬英雄,思賢如渴,若跨有荊、益,保其巖阻,西和諸戎,南撫夷越,外結好孫權,內修政理;
(09) 天下有變,則命一上將將荊州之軍以向宛、洛,將軍身率益州之眾出於秦川,百姓孰敢不簞食壺漿以迎將軍者乎?
(10) 誠如是,則霸業可成,漢室可興矣。
解決這個問題的思路主要分為兩步:首先,從磁碟檔案中讀取字串兒,然後再把它儲存到乙個陣列中,並且每一行字串兒單獨作為乙個陣列元素,最後再將陣列元素進行逆轉操作;其次,要對要求輸出的行數n進行判斷,如果n小於總行數,則直接輸出n行(也就是n個陣列元素),如果n大於等於總行數,則將陣列中所有的元素全部輸出。用**表示如下:
func challenge(filepath: string, linecount: int)
// 將字串兒input中的內容儲存在陣列中,並且每一行內容為乙個元素
var lines = input.components(separatedby: "\n")
// 對檔案中的內容進行校驗,如果內容為空,則直接返回
guard lines.count > 0 else
// 對陣列lines中的元素進行逆轉
lines.reverse()
// 取出陣列lines中的元素
for i in 0 ..< min(lines.count, linecount)
}
上面的**必須放在工程檔案中進行測試,在playground中是無法輸出的。輸入乙個大於總行數10的數字,得到的輸出結果如下:
測試結果.png
從檔案讀取字串總結
從檔案讀取字串 fscanf 1.遇到空格和換行等不可見字元結束,不會讀入換行符,末尾新增 0 2.兩行中間的乙個空行或多個空行不會讀入 3.當檔案末尾有乙個空行或多個空行時會讀一次,但不會讀入任何內容,目標字串不變,也不會新增 0 fgets str,n,fp 1.只有遇到換行 x0d x0a 和...
從標準輸入讀取字串
11 3 編寫乙個函式,從標準輸入讀取乙個字串,把字串複製到動態記憶體分配的記憶體中,並返回該字串的拷貝,這個函式不應該對讀入字串的長度作任何限制!這個問題比較簡單,需要注意字串輸入的結束處理和記憶體空間的申請的時機。include include include typedef short int...
如何從檔案中讀取字串到string物件
read stings from a file include include include include int main string item 定義字串物件 int count 0 getline fin,item,從fin物件中向item物件中讀取字串,遇到 字元則完成一次讀取 whil...