统计C语言程序行数
补充前一篇中统计C语言程序行数的程序
写得比较匆忙,可能有些失误,等弄明白GitHub的用法并完善程序后再补充完整代码链接
没有写成函数,但经过简单修改可以作为一个计算或判断函数使用
判断算法主要为以下几点
- 如果是' '、'\r'、'\t'则直接跳过;
- 如果是'\n'则判断该行是否有字符,没有跳过;
- 对于'//'类的注释,判断注释符号前是否有效,无效则跳过;
- 对于'/ * '类的注释,则寻找下一个' * /',如果中间遇到'\n',则判断该行是否有效,例如有效代码与'/ * '在同一行时,该行应该计算在内。
对于文件读写,暂时没有实现文件夹遍历,文件读写及所需头文件代码如下
#include<iostream>
#include<fstream>
#include<streambuf>
using namespace std;
ifstream a("file.txt");
string s((istreambuf_iterator<char>(a)),istreambuf_iterator<char>());
下面是判断程序主要代码
int main()
{
int i,j,k,n,m,x,y;
i=0;
j=0; //判断该行是否有效
k=0; //判断'/*'类的注释中是否有换行
n=0;
m=s.length();
while (i<m)
{
if ((s[i]==' ')||(s[i]=='\r')||(s[i]=='\t'))
{
i++;
continue;
} //第一类
if (s[i]=='\n')
{
if (j==1)
{
n++;
j=0;
}
i++;
continue;
} //第二类
if ((s[i]=='/')&&(s[i+1]=='/')&&(i<m-1))
{
if (j==1)
{
n++;
j=0;
}
i++;
while ((i<m)&&(s[i]!='\n')) i++;
i++;
continue;
} // '//'类注释
if ((s[i]=='/')&&(i<m-1))
{
if (s[i+1]=='*')
{
i+=2;
while (i<m)
{
if (s[i]=='\n')
{
if (k==0)
{
if (j==1)
{
n++;
j==0;
}
k==1;
}
}
if ((s[i]=='*')&&(i<m-1))
{
if (s[i+1]=='/')
{
i++;
break;
}
}
i++;
}
k==0;
i++;
continue;
}
} // '/*'类注释
j=1;
i++;
}
if (j==1) n++; //最后一行有时没有'\n'
统计C语言程序行数的更多相关文章
- VS里统计整个解决方案代码行数的方法
VS里统计整个解决方案代码行数,在查找里输入正则表达式:b*[^:b#/]+.*$.如下图所示: 结果如下图所示:
- Android Stduio统计项目的代码行数
android studio统计项目的代码行数的步骤如下: 1)按住Ctrl+Shift+A,在弹出的框输入‘find’,然后选择Find in Path.(或者使用快捷键Ctrl+Shift+F) ...
- linux 统计某个文件的行数
今日思语:迷茫的时候,看看身边那些优秀的人,他们还在那么努力,或许你就可以有点方向和动力了 在linux系统中,我们经常会对文件做行数统计,可以使用如下命令 wc -l file #file为具体的文 ...
- 统计C/C++代码行数
近日在写一个统计项目中C/C++文件(后缀名:C/CPP/CC/H/HPP文件)代码行数的小程序.给定包含C/C++代码的目录,统计目录里所有C/C++文件的总代码行数.有效代码行数.注释行数.空白行 ...
- shell 统计某个文件的行数命令
语法:wc [选项] 文件- 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...
- 【SQL】统计所有表的行数
环境:mssql ent 2k8 r2 原理:遍历所有用户表,用sp_spaceused过程分别获取每张表的行数并写入临时表,最后返回临时表 IF OBJECT_ID('tempdb..#TableR ...
- excel 宏循环行数据 ,Excel统计所有sheet数据行数 VBA
Sub fun1() '统计每一个sheet有多少行数据 Set s1 = Sheets("Sheet1") 'totalok = 0 To Sheets.Count s1.Cel ...
- R统计数据框的行数
如下三种方法可以实现 使用dim函数 dim(dataframe)[0] 使用nrow函数 nrow(dataframe) 使用length函数统计 length(dataframe[,1])
- 统计VS2013中有效行数
将鼠标放在解决方案处,按下ctrl+shift+F b*[^:b#/]+.*$(带前面的using)^b*[^:b#/]+.*$
随机推荐
- 仿qq的侧拉菜单效果
自定义控件 import android.animation.ArgbEvaluator; import android.animation.FloatEvaluator; import androi ...
- Spark Graphx编程指南
问题导读1.GraphX提供了几种方式从RDD或者磁盘上的顶点和边集合构造图?2.PageRank算法在图中发挥什么作用?3.三角形计数算法的作用是什么?Spark中文手册-编程指南Spark之一个快 ...
- IOS之frame和bounds区别
用最简单的语言来解释就是:setFrame和setBounds都是为了把子view加载到父view上去,但设置的参数坐标系不同,setFrame是该view在父view坐标系统中的位置和大小,setB ...
- C# WinForm 类似QQ靠近屏幕边缘隐藏显示
当窗体离屏幕四周一定距离时,改变窗体位置,引导窗体靠边:靠边后,当鼠标离开窗体时,改变窗体位置,窗体隐藏,凸出一点在屏幕内:隐藏后,当鼠标移到窗体时,窗体显示. using System; using ...
- ORALCE 编译过程卡死解决方法。
--摘自网易博客 术士 在对存储过程进行test的时候,没有完全停止,就又在另外一个窗口,对它进行修改而且进行编译,出现了卡死现象. 用PLSQL Developer 在session里,找到这条se ...
- SqlParameter 中 top 的使用
public DataTable GetAdminTopDCSCheckReport(int top) { StringBuilder strSql = new StringBuilder(); st ...
- unity3d打开对话框
最近一直在忙项目,没时间更新博客,这两天趁空封装windows下的打开对话框,支持多选.其他系统可以用ngui或者ugui封装一个. 这里就不上封装的源码了提供dll供小伙伴们使用,如果有需要源码请请 ...
- Passing Reference by value
今天查bug的时候,遇到一个问题,一个Dictionary<int[],string>数据结构,在使用key取它的value时: var tempVar = _dic[key]; 发生崩溃 ...
- SpannableString可以被点击的文字
1 TextView tv= (TextView) findViewById(R.id.textview_z); String text="一段可以被点击点击的文字,文字可以变成图片&quo ...
- Scala内部类
注意:Java内部类从属于外部类,而Scala内部类从属于对象(外部类的实例本身).