64,644
社区成员
发帖
与我相关
我的任务
分享
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
int m_comment=0;
int mm=0;
int CountCommentLine( char* filename,int set) //注释行数
{
int mm=0;
ifstream inn(filename,ios::in);
if(!inn)
{
cout << "can't" <<endl;
return 1;//返回输入
}
string line;
bool flag = false;
while(getline(inn,line))
{
//找出第一个非空白字符
size_t begin = line.find_first_not_of(" \a\b\f\n\r\t\v");
//找出最后一个非空白字符
size_t end = line.find_last_not_of(" \a\b\f\n\r\t\v");
if (end - begin >0 )
{
//不是C注释块
if(!flag)
{
//C++注释行
if (line[begin] == '/' && line[begin+1] == '/')
m_comment++;
/*C注释开始行*/
else if (line[begin] == '/' && line[begin+1] == '*')
{
m_comment++;
/*有C风格注释块*/
if (!(line[end] == '/' && line[end -1] == '*'))
flag = true;
}
}
else
{
m_comment++;
/* C风格注释块结束*/
if (line[end] == '/' && line[end -1] == '*')
flag = false;
}
}
/*该行只有一个字符,且在C风格注释块里面*/
else if (flag)
{
m_comment++;
}
}
ifstream _inn(filename,ios::in); //这是为了统计代码后有注释的行数
string line2;
bool flag2 = false;
while(getline(_inn,line2))
{
//找第一个非空白字符
size_t begin = line2.find_first_not_of(" \a\b\f\n\r\t\v");
//找最后一个非空白字符
size_t end = line2.find_last_not_of(" \a\b\f\n\r\t\v");
if (end - begin >0 )
{
if(!flag)
{
for(int i=begin; i<end; ++i)
{
if(line2[begin]!='/'&&line2[begin+1]!='*'&&line2[begin+1]!='/')
{
if(line2[i]=='/'&&line2[i+1]=='/')
{
mm++;
}
if(line2[i]=='/'&&line2[i+1]=='*'&&line2[end-1]=='*'&&line2[end]=='/')
{
mm++;
}
}
}
}
}
}
if(1==set)//代码后有注释 注释+
{
m_comment = m_comment+mm;
}
if(0==set)//代码后有注释 注释不+
{
;
}
if(2==set)
{
//等待函数完成此三项//一个传值函数?输出调用这个函数?
}
return m_comment;
}
int main(void)
{
char filename[256];
int set;
cin >>filename;
cout <<"0: 只作为代码行处理" << endl
<<"1: 只作注释行处理" << endl
<<"2: 代码行和注释行各增加一行" <<endl; //单独写一个函数完成加减工作
cin >>set;
int comment=CountCommentLine(filename,set);
cout << "注释行数:" << comment <<endl;
return 0;
}
/*aaaaaa
aaaaa// 这个重复
aaaaa// 这个重复
aaa//aa 这个重复
*/
/*
a= "//sssss\* "; 重复计一次
*/
void /*/*/ 算成了2行注释=.=