计算C ++程序中留下注释的行数

时间:2013-12-18 11:02:32

标签: c++

我是C ++的自学者。到目前为止,我设法编写了一个程序,它留下单行注释并告诉程序中的总行数。如何留下多行注释。

#include <iostream>
#include <fstream>
//#include<conio.h>
#include<string>
using namespace std;

int main () {
    char c[100];
    string path;
    int num=0;
    cout<<"Enter a file name";
    cin>>path;
    ifstream is;
    //cout<<"ennter the file to count the lines in file\n";
    is.open (path.c_str());
    try
    {
        if(!is)
        {
            throw 1;
        }
    }
    catch(int a)
    {
        cout<<"Cannot open file";
    }
    if(is)
    {
        while (is.good())
        {
            is.getline(c,100);
            if (c[0]!='\\')
                num++;  
        }
        is.close();
        cout<<"Number of lines in file is "<<num<<endl;
    }
    system("pause");
    return 0;
}

3 个答案:

答案 0 :(得分:1)

您可以使用if子句检查一行是否包含“/ *”。如果您找到匹配项,则忽略所有行,直到达到“* /” 看看你是否可以自己找出这个代码。如果您遇到问题,请告诉我们您的尝试,我们可以帮助您。

答案 1 :(得分:1)

最后我开始工作了 现在我正在计算括号

#include <iostream>
#include <fstream>
#include<string>
using namespace std;
ifstream is;
void lines();
void braces();
int main () 
{
int choice=0;
string path;
cout<<"Enter a file name to count  :";
cin>>path;
is.open (path.c_str());
if(is)
{
cout<<"1.No of lines\n2.Total No of lines excluding braces\nEnter your choice:";
cin>>choice;
switch(choice)
{
case 1:
    lines();
    break;
case 2:
    braces();
    break;
default:
    cout<<"Invalid selection";
}
}
else
{
    cout<<"Invalid path";
}
system("pause");
return 1;
}
void lines()
{
string tmp;
size_t cno=0;
int num=0;
while (is.good())
{
    getline(is,tmp);
    if((tmp.find("/*")==0))
    {
        cno=tmp.find("*/");
        while(cno==-1)
        {
        getline(is,tmp);
        cno=tmp.find("*/");
        }
    }
    else if((tmp.find("//")==0))
    {
    }
    else
    {   num++;
    }
}
    is.close();
    cout<<"Number of lines in file is "<<num<<endl; 
}
void braces()
{
string tmp;
size_t cno=0;
int num=0;
while (is.good())
{
    getline(is,tmp);
    if((tmp.find("/*")==0))
    {
        cno=tmp.find("*/");
        while(cno==-1)
        {
        getline(is,tmp);
        cno=tmp.find("*/");
        }
    }
    else if((tmp.find("//")==0))
    {
    }
    else if((tmp.find("{")!=-1&&tmp.find("}")!=-1))
    {   num++;
    }
    else if((tmp.find("{")!=-1||tmp.find("}")!=-1))
    {}
    else
        num++;
}
cout<<"Number of lines without braces is:"<<num<<endl;
}

答案 2 :(得分:0)

在C ++中,您可以使用std :: find来检查是否出现字符串“/ *”或“//”。
在第一种情况下,您可以跳过所有行,直到字符串“* /”。

另一种解决方案是直接调用脚本,如果你正在使用linux,我希望如此!

int main() {
  const int rows = system("countRows.sh");
  ...
}

您的脚本 countRows.sh 位于:

#!/bin/bash
 wc -l foo.cpp | cut -f1 -d' '

该命令为您提供所有文件行,您必须实现过滤器!