如何统计源代码文件里的空白行??求大侠指导

li08240418 2011-12-13 11:31:08
c++编写

如何统计源代码文件里的空白行 以cpp文件或.h为例

文件I/O流 用那个函数好 read?get? getline?

我写的用getline提取一行 出来后不知道怎么判断此行是不是空白行.......




int CountLine::CountBlankLine(char* filename)
{
ifstream inn(filename,ios::in);
if(!inn)
{
cout << "cna't" <<endl;
return 0;//返回输入,待编写
}
char str[256];
while(!inn.eof())
{
inn.getline(str,sizeof(str));
if(str[0]=='\0')
{
m_blank++;
}


}
return m_blank;
//我写的这个只可以统计完全空白的行 其他统计不出来 求教育!!



空白行有可能是:
tab开始的空白行
空格开始的空白行
直接是空白行
...全文
128 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tonywearme 2011-12-13
  • 打赏
  • 举报
回复
既然你用C++,我建议你完全用C++,不要混用C, C++。字符串的话用std::string。

std::string str; 
while(!inn.eof())
{
std::getline(inn, str);
size_t found = str.find_first_not_of("\t ");
if (found != string::npos)
++m_blank;
}
li08240418 2011-12-13
  • 打赏
  • 举报
回复
我 晚上结贴撒 看看再有没有奇特的点子

云时代给力了
li08240418 2011-12-13
  • 打赏
  • 举报
回复
恩 云帮助就是好啊 谢谢大家 有思路了
赵4老师 2011-12-13
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
char ln[MAXLEN];
FILE *f;
int i,z;
int b,n,L;
int main(int argc,char **argv) {
if (argc<2) {
printf("Usage:%s fullpathfilename.ext\nget total blank/non-blank/total linenumbers.\n",argv[0]);
return 1;
}
f=fopen(argv[1],"r");
if (NULL==f) {
printf("Can not open file [%s]!\n",argv[1]);
return 2;
}
z=0;
b=0;
n=0;
L=0;
while (1) {
if (NULL==fgets(ln,MAXLEN,f)) break;
L=strlen(ln);
if ('\n'==ln[L-1]) {
if (0==z) {
for (i=0;i<L-1;i++) {
if (!(' '==ln[i] || '\t'==ln[i])) break;
}
if (i<L-1) z=1;//当前行不是空行
}
if (0==z) b++; else n++;
z=0;
} else {
if (0==z) {
for (i=0;i<L;i++) {
if (!(' '==ln[i] || '\t'==ln[i])) break;
}
if (i<L) z=1;//当前行不是空行
}
}
}
fclose(f);
if (L>0 && '\n'!=ln[L-1]) {
if (0==z) b++; else n++;//最后一行末尾无'\n'也计算
}
printf("File:[%s] total blank/non-blank/total linenumbers is %d/%d/%d\n",argv[1],b,n,b+n);
return 0;
}
一介布衣萧萧 2011-12-13
  • 打赏
  • 举报
回复
3楼正解,可以对每一行判断其是否是TAB或空格,如果有这两个以外的就是空行,当然,换行那个\r\n不算。还有一种情况就是没有其他字符,直接就是空行的。LZ按照这几种情况就可以统计到了
yisikaipu 2011-12-13
  • 打赏
  • 举报
回复
搜 白空格 "white space"

	inn.getline(str,sizeof(str));
int len=strlen(str);
for(int i=0;i<len;++i)
if(!isspace(str[i]))
;// 不是空行
tonywearme 2011-12-13
  • 打赏
  • 举报
回复
空白字符无非就是:制表符(Tab, ASCII码0x09)、空格(Space,ASCII码0x20)。读上来一行后,判断有没有字符在这个以外,如果没有那就是空白行。
尘缘udbwcso 2011-12-13
  • 打赏
  • 举报
回复
统计总行数,减去不是空白的行数
li08240418 2011-12-13
  • 打赏
  • 举报
回复


给点提示吧啊啊啊啊

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧