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;
}相关文章:
C++实现的代码行数统计器
代码在GitHubMaolinYe/CodeCounter: C20实现的代码统计器,代码量小于100行,可以统计目录下所有代码文件的行数 (github.com) 前段时间到处面试找实习,有技术负责人的负责人问我C写过多少行,5万还是10万,用来评估熟练度…...
C# 结合 JS 暴改腾讯 IM SDK Demo
目录 关于腾讯 IM SDK Demo 范例运行环境 设计思路 服务端生成地址 IM 服务端接收 IM 客户端程序 小结 关于腾讯 IM SDK Demo 腾讯云即时通信 IM SDK 提供了单聊、群聊、关系链、消息漫游、群组管理、资料管理、直播弹幕等功能,并提供完备的 App 接入及管…...
【Web】CISCN 2024初赛 题解(全)
目录 Simple_php easycms easycms_revenge ezjava mossfern sanic Simple_php 用php -r进行php代码执行 因为ban了引号,考虑hex2bin,将数字转为字符串 php -r eval(hex2bin(16进制)); 注意下面这段报错,因为加不了引号,开…...
【C++进阶】AVL树
0.前言 前面我们已经学习过二叉搜索树了,但如果我们是用二叉搜索树来封装map和set等关联式容器是有缺陷的,很可能会退化为单分支的情况,那样效率就极低了,那么有没有方法来弥补二叉搜索树的缺陷呢? 那么AVL树就出现了&…...
云部署最简单python web
最近在玩云主机,考虑将简单的web应用装上去,通过广域网访问一下,代码很简单,所以新手几乎不会碰到什么问题。 from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return Hello, World!app.route(/gree…...
【Pytorch】【MacOS】14.m1芯片使用mps进行深度模型训练
读者要先自行安装python以及anaconda,并且配置pytorch环境 第一步 测试环境 import torch # 判断macOS的版本是否支持 print(torch.backends.mps.is_available()) # 判断mps是否可用 print(torch.backends.mps.is_built())如果第一个语句为False,说明当前…...
go学习笔记-从圣经中抄录的接口值的思考
接口值 接口值,由两个部分组成,一个具体的类型和那个类型的值 下面4个语句中,变量w得到了3个不同的值。( 开始和最后的值是相同的) var w io.Writer w os.Stdout w new(bytes.Buffer) w nil var w io.Writer var…...
ICML 2024 时空数据(Spatial-Temporal)论文总结
2024ICML(International Conference on Machine Learning,国际机器学习会议)在2024年7月21日-27日在奥地利维也纳举行 (好像ICLR24现在正在维也纳开)。 本文总结了ICML 24有关时空数据(Spatial-temporal) 的相关论文…...
多线程(C++11)
多线程(C) 文章目录 多线程(C)前言一、std::thread类1.线程的创建1.1构造函数1.2代码演示 2.公共成员函数2.1 get_id()2.2 join()2.3 detach()2.4 joinable()2.5 operator 3.静态函数4.类的成员函数作为子线程的任务函数 二、call…...
HLS入门
目录 一、 内容介绍二、 理解HLS2.1 HLS是什么?与VHDL/Verilog编程技术有什么关系?2.2 HLS有哪些关键技术问题?目前存在什么技术局限性? 三、 HLS在Quartus上的实现3.1 配置环境3.2 测试 四、 参考链接 一、 内容介绍 理解HLSHLS在Quartus上…...
电信光猫的USB存储对外网开放访问
前提条件当然是要有公网IP地址了,没有的话去找电信索要,然后可以使用动态域名正常访问。 我的电信光猫发现共享访问速度还可以,会有31M/s左右的写入速度 但是有一个不方便的是,无法从外网提供访问,SMB协议所用的445端…...
世界上首位AI程序员诞生,AI将成为人类的对手吗?
3月13日,世界上第一位AI程序员Devin诞生,不仅能自主学习新技术,自己改Bug,甚至还能训练和微调自己的AI模型,表现已然远超GPT-4等“顶流选手”。 AI的学习速度如此之快,人类的教育能否跟上“机器学习”的速…...
什么是创造力?如何判断自己的创造力?
创造力,主要表现为创新思想、发现和创造新事物的能力,是知识,智力和能力的综合能力,尤其是在职业发展方面,创造力具有重要的意义,企业的核心竞争力就来源于创造力,这就需要具有创造力的员工来推…...
Elasticsearch集群搭建学习
Elasticsearch集群聚合、集群搭建 RestClient查询所有高亮算分控制 数据聚合DSL实现Bucket聚合DSL实现Metrics聚合RestAPI实现聚合 拼音分词器如何使用拼音分词器?如何自定义分词器?拼音分词器注意事项? 自动补全数据同步集群搭建ES集群结构创…...
数据库(vb.net+OleDB+Access)简易学生信息管理系统
在我们日常生活当中,数据库一词往往离不开我们的编程界,在学校、仓库等方面起着存储数据及数据关系作用的文件。相较于Excel,Access可以存储无限多的记录,内容也十分丰富,例如文本、数字、日期、T&F等。而且不需要…...
Android 自定义图片进度条
用系统的Progressbar,设置图片drawable作为进度条会出现图片长度不好控制,容易被截断,或者变形的问题。而我有个需求,使用图片背景,和图片进度,而且在进度条头部有个闪光点效果。 如下图: 找了…...
对话:用言语构建深刻的思想碰撞
对话:用言语构建深刻的思想碰撞 在写书中,对话是一种有力的工具,能与读者进行有效的沟通和交流,引发深思和反思。它不仅是信息传递的方式,更是加深情感、探讨主题和吸引读者参与的桥梁。你应从读者的角度思考…...
Linux完整版命令大全(九)
4. linux压缩备份命令 ar 功能说明:建立或修改备存文件,或是从备存文件中抽取文件。语 法:ar[-dmpqrtx][cfosSuvV][a<成员文件>][b<成员文件>][i<成员文件>][备存文件][成员文件]补充说明:ar可让您集合许多…...
solidworks画螺栓学习笔记
螺栓 单位mm 六边形 直径16mm 水平约束 拉伸 选择厚度6mm 拉伸切除 画相切圆 切除厚度6mm,反向切除 ,拔模角度45 螺栓 直径9mm,长度30mm 倒角 直径1mm,角度45 异形孔向导 螺纹线 偏移打勾,距离为2mm&#…...
【Spark】加大hive表在HDFS存的每个文件的大小
配置参数: spark.hadoop.hive.exec.orc.default.stripe.size78643200 spark.hadoop.orc.stripe.size78643200 spark.hadoopRDD.targetBytesInPartition78643200 spark.hadoop.hive.exec.dynamic.partition.modenonstrict spark.sql.sources.partitionOverwriteMode…...
详细解析Spring如何解决循环依赖问题事
AI训练存储选型的演进路线 第一阶段:单机直连时代 早期的深度学习数据集较小,模型训练通常在单台服务器或单张GPU卡上完成。此时直接将数据存储在训练机器的本地NVMe SSD/HDD上。 其优势在于IO延迟最低,吞吐量极高,也就是“数据离…...
Hypersistence Utils Spring集成实战:@Retry注解和AOP重试机制
Hypersistence Utils Spring集成实战:Retry注解和AOP重试机制 【免费下载链接】hypersistence-utils The Hypersistence Utils library (previously known as Hibernate Types) gives you Spring and Hibernate utilities that can help you get the most out of yo…...
如何实时监控crawler4j爬虫状态与性能?完整监控告警指南
如何实时监控crawler4j爬虫状态与性能?完整监控告警指南 【免费下载链接】crawler4j Open Source Web Crawler for Java 项目地址: https://gitcode.com/gh_mirrors/cr/crawler4j crawler4j是一款强大的Java开源网络爬虫框架,能够帮助开发者快速构…...
Java开发者转型大模型开发:优势、路径与实践全指南
在人工智能技术飞速迭代的当下,大模型开发已然成为科技领域的核心赛道,吸引着无数开发者投身其中。作为一名深耕Java领域多年的后端开发者,我经常收到同行的疑问:我们这些长期专注于传统后端开发的人,能否顺利切入大模…...
CV-CUDA快速入门:10分钟学会构建你的第一个GPU加速图像处理应用
CV-CUDA快速入门:10分钟学会构建你的第一个GPU加速图像处理应用 【免费下载链接】CV-CUDA CV-CUDA™ is an open-source, GPU accelerated library for cloud-scale image processing and computer vision. 项目地址: https://gitcode.com/gh_mirrors/cv/CV-CUDA …...
2025届必备的AI学术网站解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于内容创作里,要是过度去依赖AIGC,那么便兴许会致使文本欠缺人性化的…...
Springboot 实现多数据源(PostgreSQL 和 SQL Server)连接父
一、环境准备 Free Spire.Doc for Python 是免费 Python 文档处理库,无需依赖 Microsoft Word,支持 Word 文档的创建、编辑、转换等操作,其中内置的 Markdown 解析能力,能高效实现 Markdown 到 Doc/Docx 格式的转换,且…...
Steam Achievement Manager:游戏成就全流程管理工具详解
Steam Achievement Manager:游戏成就全流程管理工具详解 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager 🌟 为什么选择Steam Achie…...
揭秘.NET 10 + Blazor 9预发布架构图:微软内部泄露的3类新渲染管线对比(含性能基准测试数据+GC压力热力图)
第一章:揭秘.NET 10 Blazor 9预发布架构图:微软内部泄露的3类新渲染管线对比(含性能基准测试数据GC压力热力图) 微软近期在.NET Conf 2024 Preview Track中非正式披露了.NET 10与Blazor 9联合演进的核心架构蓝图,其中…...
OpenClaw二次开发:千问3.5-9B接入自定义Python模块
OpenClaw二次开发:千问3.5-9B接入自定义Python模块 1. 为什么需要自定义模块扩展 去年我在尝试用OpenClaw自动化处理公司内部的数据报表时,发现现成的技能市场里没有适配我们内部BI系统的模块。官方提供的通用HTTP请求工具虽然能用,但每次都…...
