C++实现简单源代码计算

来源:互联网 发布:微信机器人 java 编辑:程序博客网 时间:2024/04/30 15:05
#include<iostream>#include<fstream>#include<string> using namespace std; /*本程序根据遇到的首个非空字符进行判断,以下情况不能检测:1.代码行后面注释//2.代码行中间注释/*......*///3.代码行后面注释/*.....*/(如果注释几行会连续判断为代码行)int main(){char filename[60];ifstream inFile;cout<<"请输入根目录的文件名: (本程序源代码输入:源.cpp)"<<endl;cin.getline(filename,60);inFile.open(filename);if(!inFile.is_open()){cout<<"fail"<<endl;exit(EXIT_FAILURE);}int c_line=0;int n_line=0;int e_line=0;int line=0;string temp;// /*......*/注释判断标志bool eflag=false;// 是否空行判断标志bool isline=false;while(inFile.good()){while(getline(inFile,temp)){line++;for(unsigned int i=0;i<temp.length();i++){//去除无效字符if(temp[i]==' '||temp[i]=='\t'||temp[i]=='\r'){continue;};//代码行判断if(temp[i]!=' '&&temp[i]!='\t'&&temp[i]!='\r'&&temp[i]!='/'&&!eflag){isline=true;c_line++;break;};//注释/*......*/判断if(temp[i]!=' '&&temp[i]!='\t'&&temp[i]!='\r'&&eflag){isline=true;while(1){i++;if(temp[i]=='*'&&temp[i+1]=='/'){eflag=false;e_line++;break;};if(i>=temp.length()){e_line++;break;};};};//注释/*......*/判断i++;if(temp[i]=='*'&&temp[i+1]=='/'){eflag=false;e_line++;break;};if(i>=temp.length()){e_line++;break;};};};//注释//判断if(temp[i]=='/'&&i<(temp.length()-1)&&temp[i+1]=='/'&&!eflag){isline=true;e_line++;break;};};//判断是否空行if(!isline){n_line++;}//重置有效字符行的标志isline=false;};}inFile.close();cout<<"总行数为:"<<line<<endl;cout<<"代码行数为:"<<c_line<<endl;cout<<"空行数为:"<<n_line<<endl;cout<<"注释行数为:"<<e_line<<endl;return 0;};
<img src="http://img.blog.csdn.net/20150413093951592?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRFNHR0dHR0c=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

0 0