WC的基本功能實現.(Java)

来源:https://www.cnblogs.com/yuetao/archive/2018/09/12/9637758.html
-Advertisement-
Play Games

我的GitHub地址:https://github.com/Yuetao1219/lessons WC 項目要求 wc.exe 是一個常見的工具,它能統計文本文件的字元數、單詞數和行數。這個項目要求寫一個命令行程式,模仿已有wc.exe 的功能,並加以擴充,給出某程式設計語言源文件的字元數、單詞數和 ...


我的GitHub地址:https://github.com/Yuetao1219/lessons

WC 項目要求

wc.exe 是一個常見的工具,它能統計文本文件的字元數、單詞數和行數。這個項目要求寫一個命令行程式,模仿已有wc.exe 的功能,並加以擴充,給出某程式設計語言源文件的字元數、單詞數和行數。

實現一個統計程式,它能正確統計程式文件中的字元數、單詞數、行數,以及還具備其他擴展功能,並能夠快速地處理多個文件。

 具體功能要求:

程式處理用戶需求的模式為:

 wc.exe [parameter] [file_name]

 基本功能列表:

 wc.exe -c file.c     //返迴文件 file.c 的字元數

 wc.exe -w file.c    //返迴文件 file.c 的詞的數目  

 wc.exe -l file.c      //返迴文件 file.c 的行數

項目分析與實現

1.統計文本文件,首先要讀入文件,並確保文件存在並可讀。用exists()方法和canRead()方法對輸入的文件進行判斷。代碼如下:

2.對於要執行的操作,用-c統計字元,-l統計行數,-w統計單詞,-z統計字母。設計思路:以字元串的形式輸入一個或多個操作符,用空格隔開。然後用split()方法將字元串以空格分成一個或多個字元串數組,最後遍曆數組實現想執行的操作。

3.統計字元數和行數。用read()方法依次掃描文件內的每一個字元,遇到'\n',則rows++,遇到!(' '&&'\n'),則chars++。

4.統計單詞。這個也是相對比較難的操作。因為對代碼中單詞的定義是不明確的,比如:int(算是一個單詞嗎?),char_count(算是一個單詞or兩個單詞)。既然要統計,就得找到一個明確的標準。我的標準是,對於兩個及兩個以上連續的字母則為一個單詞,除字母以外的字元作為單詞與單詞之間的分隔符。例如:對於前述的例子,int 算是一個單詞,char_count算是兩個單詞char和count。於是,既然找到了是否是單詞的定義,那麼怎樣用代碼來實現?

前面的統計字元數和行數都是直接對文本文件進行依次掃描,那麼統計單詞,就是在統計字母的基礎上,加上一個flag對字母是否連續進行判斷,以此到達統計單詞的目的。代碼如下:

首先判斷是否是字母,如果是,則flag++,不是,則flag置0。當flag>=2(滿足至少兩個字母連續),且當前字母不是字母,則words++。

遇到的困難:我最開始想到上面這個思路後,用代碼實現,我只是對flag>=2&&a不是字母進行了判斷,並words++,flag=0。沒有想到當flag=1時a不是字母的情況,此時,沒有將flag置0,儘管代碼沒有被報錯,但是,我運行程式後,多次輸入不同的測試文件,得出的輸出值都是錯誤。後來,我仔細分析了該段代碼,找到了代碼不嚴謹而導致錯誤的地方,沒有對掃描會出現的所有情況進行逐一分析,只想到了大多數情況,忽略了一些不起眼的小問題而導致這段代碼進行了錯誤的計算。經過思考和改正代碼,然後又輸入多個不同文件進行驗證,都得到了理想的輸出結果。

測試:

 總結代碼量比較少,但是基本實現了對文本文件的字元數、行數、單詞和字母的統計,還沒有實現對空行數、註釋行數和代碼行數進行統計,需要改進和升級的地方還有很多。條條大路通羅馬,對於這個項目要求,一定有很多的方案和設計,以及更簡潔的代碼,所謂簡潔,不只是代碼量少,而且時間複雜度低。

PSP

PSP2.1Personal Software Process Stages預估耗時(分鐘)實際耗時(分鐘)
Planning 計劃  210  
· Estimate · 估計這個任務需要多少時間  180 240 
Development 開發  150 210 
· Analysis · 需求分析 (包括學習新技術) 50  90 
· Design Spec · 生成設計文檔 60  80 
· Design Review · 設計覆審 (和同事審核設計文檔) 30  40 
· Coding Standard · 代碼規範 (為目前的開發制定合適的規範)  40 50 
· Design · 具體設計 40  50 
· Coding · 具體編碼 90  120 
· Code Review · 代碼覆審  20 30 
· Test · 測試(自我測試,修改代碼,提交修改) 45  50 
Reporting 報告  30 40 
· Test Report · 測試報告  30 30 
· Size Measurement · 計算工作量  30 30 
· Postmortem & Process Improvement Plan · 事後總結, 並提出過程改進計劃  20  20
  合計    

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 基於AQS的前世今生,來學習併發工具類ReentrantReadWriteLock。本文將從ReentrantReadWriteLock的產生背景、源碼原理解析和應用來學習這個併發工具類。 1、 產生背景 前面我們學習的重入鎖ReentrantLock本質上還是互斥鎖,每次最多只能有一個線程持有Re ...
  • Java介紹 是一門面向對象的程式設計的編程語言,在 年, 公司發佈了 這門編程語言,有咖啡的名稱,是當時靈機一動的想法。在 年的時候被 公司收購了,目前 的版本是 了。 那麼什麼是 呢?學習 必須要有 ,那麼我們現在去下載吧!根據下方給的自己就可以找到了。 下載地址 下載jdk,和eclipse就 ...
  • 原創 C++中內置了sor函數供排序,函數原型為: 如果要進行降序排序,需要另外定義cmp函數: 另外還可以對string和結構體進行排序: 22:37:40 2018-09-12 ...
  • 一、認識LInux系統 1、Linux下一切皆文件; 2、Linux下所有文件都是保存在根目錄下的 /; 3、根目錄下的文件(大致) /bin :保存二進位文件的目錄; /boot:用來保存系統啟動時需要的代碼程式; /dev:所有外設所在的根目錄; /etc:配置文件所在目錄; /home:普通用 ...
  • 今天主要介紹一下在Windows下安裝pyspider,pyspider是一款用python編寫的網路爬蟲框架,這個框架最好是在linux下運行,Windows下運行可能會出現相容性問題,如果實在要在Windows下運行,最好選擇32位版本,64位版本可能會出現運行崩潰問題。 1、要安裝pyspid ...
  • # 文件的刷新flash# 為什麼要刷新文件呢?# 首先我們就要知道電腦是怎麼儲存信息的,# 寫的代碼保存在緩存中當緩存滿了之後就會將內容儲存到硬碟中。# 那這個跟刷新有什麼關係呢?# 系統也會自動儲存信息但是儲存信息不及時,當也及時反饋一些信息時會滯後# 或者重要信息要存儲至電腦中,避免意外情況導 ...
  • 功能簡介 PrintStream 為其他輸出流添加了功能,使它們能夠方便地列印各種數據值表示形式 裝飾器模式中具體的裝飾類 它提供的功能就是便捷的列印各種數據形式 FilterInputStream為裝飾器模式中的抽象角色 簡言之,PrintStream可以快捷的列印輸出各種類型的數據 PrintS ...
  • 30行代碼奉上!(MNIST手寫數字的識別,識別率大約在91%,簡單嘗試的一個程式,小玩具而已) 其中x作為輸入是一個1x768的向量,然後就是經過權重和偏食,就得到10個輸出,然後用softmax()進行預測值的輸出。 此外y_作為真值,要用到一個占位符。 主要用到的tensorflow的函數有 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...