C++實現的代碼行數統計器

代碼在GitHubMaolinYe/CodeCounter: C++20實現的代碼統計器,代碼量小于100行,可以統計目錄下所有代碼文件的行數 (github.com)

前段時間到處面試找實習,有技術負責人的負責人問我C++寫過多少行,5萬還是10萬,用來評估熟練度,有點難頂,于是寫個代碼統計器吧,輸入文件夾目錄或者代碼文件,可以統計所有代碼的行數

可以直接編譯代碼運行程序,在控制臺輸入目錄的路徑按下回車即可,例如輸入

C:\Users\Yezi\Desktop\C++\CodeCounter

也可以在終端命令行直接運行編譯好的程序,帶上參數運行,例如輸入

.\CodeCounter.exe C:\Users\Yezi\Desktop\C++\CodeCounter

思路比較簡單,主要是用到了C++17的filesystem庫用來解析目錄和提取文件后綴,如果路徑是個目錄就提取子目錄項逐個分析,如果子目錄項是目錄就遞歸調用本身繼續解析目錄,如果是代碼文件就開始計數行數

//
// Created by YEZI on 2024/5/20.
//#ifndef CODECOUNTER_H
#define CODECOUNTER_H
#include<vector>
#include<string>
#include<filesystem>
#include <fstream>
#include <iostream>class CodeCounter {int lines = 0;// 檢查是否是代碼文件static bool isCodeFile(const std::filesystem::path &path) {// 常見代碼文件后綴static const std::vector<std::string> extensions = {".cpp", ".h", ".java", ".py", ".cs", ".js", ".go", ".c", ".cc", ".hh"};// 檢查路徑是否存在if (std::filesystem::exists(path) == false) {std::cerr << "There is no file " << path << std::endl;return false;}// 檢查是否是文件if (is_regular_file(path) == false) {std::cerr << path << " is no a file." << std::endl;return false;}std::string extension = path.extension().string();for (const auto &e: extensions) {if (e == extension) {return true;}}return false;}void countCodeFile(const std::filesystem::path &filePath) {// 檢查是否是代碼文件if (isCodeFile(filePath) == false)return;std::ifstream file(filePath);// 檢查文件是否可以打開if (file.is_open() == false) {std::cerr << "Error opening file: " << filePath << std::endl;return;}std::string trash;int count=0;while (std::getline(file, trash)) {++count;}lines+=count;std::cout<<filePath<<" Lines: "<<count<<std::endl;}void countDirectory(const std::filesystem::path &path) {// 檢查是否是目錄if (is_directory(path) == false)return;for (const auto &entry: std::filesystem::directory_iterator(path)) {if (entry.is_directory())countDirectory(entry.path());elsecountCodeFile(entry.path());}}public:void countThis(const std::filesystem::path &path) {if (is_directory(path))countDirectory(path);elsecountCodeFile(path);std::cout << "Code Lines: " << lines;}
};
#endif //CODECOUNTER_H

從命令行參數讀取目錄或者從控制臺輸入讀取目錄

#include <iostream>
#include"CodeCounter.h"int main(int argc, char *argv[]) {CodeCounter code_counter;std::string path;if (argc == 2)path.assign(argv[1]);elsestd::getline(std::cin, path);code_counter.countThis(path);return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15378.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15378.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15378.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Capture One Studio for Mac:打造完美影像的利器

對于攝影師而言&#xff0c;每一次按下快門都是一次對完美影像的追求。而Capture One Studio for Mac正是這樣一款能夠幫助你實現這一追求的利器。 Capture One Studio for Mac v16.4.2.1中文直裝版下載 首先&#xff0c;Capture One Studio for Mac擁有出色的圖像處理能力。它…

從零起航,Python編程全攻略

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、Python入門之旅 二、Python進階之道 三、Python爬蟲實戰 四、Python數據分析利器 五…

kind: Telemetry

訪問日志 訪問日志提供了一種從單個工作負載實例的角度監控和理解行為的方法。 Istio 能夠以一組可配置的格式為服務流量生成訪問日志&#xff0c; 使操作員可以完全控制日志記錄的方式、內容、時間和地點。 有關更多信息&#xff0c;請參閱獲取 Envoy 的訪問日志。 https:/…

TS+elementUI的表格做form校驗寫法(手機/郵箱號驗證)

1.form表單寫法 <template><div style"height:100%;width:100%;position:relative"><el-dialog title"編輯" :visible.sync"dialogVisible" width15% :close-on-click-modalfalse><el-form :model"form" :rule…

模塊化程序設計(函數的定義、調用、參數傳遞、局部變量、全局變量)

函數的引入&#xff1a; 我們曾經學習了程序設計中的三種基本控制結構&#xff08;順序、分支、循環&#xff09;。用它們可以組成任何程序。但在應用中&#xff0c;還經常用到子程序結構。 通常&#xff0c;在程序設計中&#xff0c;我們會發現一些程序段在程序的不同地方反復…

[python]當你認為python字符串的strip()或replace()不能刪除空格或者換行符的時候,看這里

str "123 abc\r\n" 當你調用 str.strip() 或 str.replace("\n","")之后&#xff0c;發現空格或換行符還存在&#xff0c; 是因為strip()和replace()沒有改變str本身的值&#xff0c;需要這樣重新賦值&#xff1a; str str.strip() ...

RabbitMQ 發布訂閱

RabbitMQ 發布訂閱視頻學習地址&#xff1a; 簡單模式下RabbitMQ 發布者發布消息 消費者消費消息 Publist/Subscribe 發布訂閱 在 RabbitMQ 中&#xff0c;發布訂閱模式是一種消息傳遞方式&#xff0c;其中發送者&#xff08;發布者&#xff09;不會將消息直接發送到特 定的…

基于open3d對kitti數據集檢測結果可視化

前言 KITTI數據集是自動駕駛和計算機視覺領域中一個廣泛使用的基準數據集&#xff0c;它提供了豐富的傳感器數據&#xff0c;包括激光雷達、相機和GPS等。Open3D是一個功能強大的3D數據處理和可視化庫&#xff0c;支持多種3D數據格式。本文將介紹如何使用Open3D對KITTI數據集的…

Python常見數據類型處理

一、數據類型分類 Python3 中常見的數據類型有&#xff1a; Number&#xff08;數字&#xff09;String&#xff08;字符串&#xff09;bool&#xff08;布爾類型&#xff09;List&#xff08;列表&#xff09;Tuple&#xff08;元組&#xff09;Set&#xff08;集合&#xf…

詳解 Spring MVC(Spring MVC 簡介)

什么是 Spring MVC&#xff1f; Spring MVC 是 Spring 框架提供的一個基于 MVC 模式的輕量級 Web 框架&#xff0c;是 Spring 為表示層開發提供的一整套完整的解決方案&#xff0c;Spring MVC 使用了 MVC 架構模式&#xff0c;將 Web 層職責解耦&#xff0c;基于請求驅動模型&…

基于Java、SpringBoot和uniapp在線考試系統安卓APP和微信小程序

摘要 基于Java、SpringBoot和uniapp的在線考試系統安卓APP微信小程序是一種結合了現代Web開發技術和移動應用技術的解決方案&#xff0c;旨在為教育機構提供一個方便、高效和靈活的在線考試平臺。該系統采用Java語言進行后端開發&#xff0c;使用SpringBoot框架簡化企業級應用…

SpringCloud微服務之Nacos、Feign、GateWay詳解

SpringCloud微服務之Nacos、Feign、GateWay詳解 1、Nacos配置管理1.1、統一配置管理1.1.1、在nacos中添加配置文件1.1.2、從微服務拉取配置 1.2、配置熱更新1.2.1、方式一1.2.2、方式二 1.3、配置共享1.3.1、配置共享的優先級 1.4、搭建nacos集群1.4.1、初始化數據庫1.4.2、下載…

plt多子圖設置

import matplotlib.pyplot as plt# 使用 subplots 函數創建一個 2x3 的子圖網格 fig, axs plt.subplots(nrows2, ncols3, figsize(16, 10)) # 調整 figsize 來改變圖像大小# 遍歷每個子圖&#xff0c;并繪制一些內容&#xff08;這里只是簡單的示例&#xff09; for ax in ax…

React與Vue的區別?

一、區別: 1. 語法 Vue采用自己特有的模板語法&#xff1b; React是單向的&#xff0c;采用jsx語法創建react元素。 2.監聽數據變化的實現原理不同 Vue2.0 通過Object.defineproperty()方法的getter/setter屬性, 實現數據劫持, 每次修改完數據會觸發diff算法(雙端對比) …

VUE 頁面生命周期基本知識點

在 Vue.js 中&#xff0c;頁面生命周期&#xff08;更準確地說是組件生命周期&#xff09;指的是組件從創建到銷毀的一系列過程。了解這些生命周期鉤子可以幫助我們更好地管理組件的狀態和行為。以下是 Vue 組件的主要生命周期鉤子&#xff1a; beforeCreate 在實例初始化之后&…

vue使用element plus組件上傳服務器

在Vue項目中使用Element Plus組件上傳文件到服務器&#xff0c;你可以使用ElUpload組件。以下是一個簡單的示例&#xff0c;展示了如何使用ElUpload組件來上傳文件&#xff0c;并將其保存到服務器。 首先&#xff0c;確保你已經安裝了Element Plus。 npm install element-plu…

從入門到精通:詳解Linux進程管理

前言 在這篇文章中&#xff0c;我將帶領大家深入學習和理解Linux系統中的進程管理。無論你是初學者還是有一定經驗的開發者&#xff0c;相信這篇文章都會對你有所幫助。我們將詳細講解馮諾依曼體系結構、操作系統概念、進程管理、進程調度、進程狀態、環境變量、內存管理以及其…

C語言之函數和函數庫以及自己制作靜態動態鏈接庫并使用

一&#xff1a;函數的本質 1&#xff1a;C語言為什么會有函數 &#xff08;1&#xff09;整個程序分為多個源文件&#xff0c;一個文件分為多個函數&#xff0c;一個函數分成多個語句&#xff0c;這就是整個程序的組織形式。這樣的組織好處在于&#xff1a;分化問題、、便于程序…

分布式版本控制工具 git

git 是什么 分布式版本控制工具。github 是代碼托管平臺。 git 有什么用 保存文件的所有修改記錄。使用版本號&#xff08;sha1 哈希值&#xff09; 進行區分。隨時可瀏覽歷史版本記錄。可還原到歷史指定版本。對比不同版本的文件差異。 為什么要使用 git 多人協作開發一個大…

SQL 優化

SQL 優化是指通過各種手段提高 SQL 查詢的執行效率,減少資源消耗,提高數據庫的整體性能。以下是一些詳細的 SQL 優化方法,包括索引優化、查詢優化、數據庫設計優化等。 1. 索引優化 創建適當的索引: 單列索引:在查詢中頻繁使用的單個列上創建索引。多列索引(復合索引):…