统计C语言程序行数
2017-01-16 17:21
176 查看
补充前一篇中统计C语言程序行数的程序
写得比较匆忙,可能有些失误,等弄明白GitHub的用法并完善程序后再补充完整代码链接
没有写成函数,但经过简单修改可以作为一个计算或判断函数使用
判断算法主要为以下几点
如果是' '、'\r'、'\t'则直接跳过;
如果是'\n'则判断该行是否有字符,没有跳过;
对于'//'类的注释,判断注释符号前是否有效,无效则跳过;
对于'/ * '类的注释,则寻找下一个' * /',如果中间遇到'\n',则判断该行是否有效,例如有效代码与'/ * '在同一行时,该行应该计算在内。
对于文件读写,暂时没有实现文件夹遍历,文件读写及所需头文件代码如下
下面是判断程序主要代码
写得比较匆忙,可能有些失误,等弄明白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'
相关文章推荐
- 文件中未能加载项目文件,名称不能以“<”字符(十六进制0x3c)开始
- PAT乙级1051
- c++之简单的推箱子游戏
- C语言位操作 & | ^ ~ << >>
- C++语言--运算符重载--4.1--一般运算符重载、关系运算符重载、逻辑运算符重载等
- malloc/free与new/delete的区别
- C++笔记之类与对象
- C语言atof()函数:将字符串转换为double(双精度浮点数)
- C++中string erase函数的使用(转载)
- PAT乙级1052
- C语言实验——求绝对值(选择结构)
- c/c++程序main函数参数解析,以及参数传递的不同方法
- canny边缘检测算法原理与C语言实现
- C语言strcat()函数:连接字符串
- C语言atoi()函数:将字符串转换成int(整数)
- C++中的long long和__int64类型
- 假期练习--求三个整数中的最大值
- Letter Combinations of a Phone Number(middle)
- 拷贝函数的正常使用
- NDK - 调用函数传参数错误问题