如何读取.cpp文件中的下一个char

时间:2016-02-01 21:52:50

标签: c++ fstream

我正在做一个程序来计算.cpp文件的行数,类的数量,注释的数量,函数的数量,以及类或函数内的行数

我的一个问题是,我无法比较我和我的下一个角色。

这是我的代码:

while(readfile.good())
{
    string compare;

     while(!readfile.eof())
     { 
       std::getline(readfile, compare);
       number_of_lines++;

       if(readfile.peek() == 47 && /*here i need to compare next character*/)
        lines_of_comment++;
       if((offset = compare.find("/*clase*/", 0)) != string::npos)
       {
         lines_of_comment++;
         number_of_class++;
       }
       else if ((offset = compare.find("/*funcion*/",0)) != string::npos)
       {
         lines_of_comment++;
         number_of_functions++;
       }
       else if ((offset = compare.find("/*end*/",0)) != string::npos)
         lines_of_comment++;
    }
  }

如何比较下一个角色?

如果你能给我一些关于如何计算函数内部线条的想法。

1 个答案:

答案 0 :(得分:1)

回答这一行:

template <class S>
void stk_pop(S &stk)
{
    stk.pop();
}

基本上,你想偷看两个角色。您可以使用此代码((1)或(2)):

if(readfile.peek() == 47 && /*here i need to compare next character*/)

输出将是:

#include <iostream>
#include <sstream>

int main()
{
    std::istringstream iss("Hello");
    std::cout << (char) iss.get();
    std::cout << (char) iss.peek(); // can be get() if you use (2)

    // (1)
    iss.unget();

    // (2)
    //iss.seekg(-1, std::ios_base::cur);

    std::cout << (char) iss.peek() << std::endl;
    return 0;
}

然而,我不明白为什么你需要偷看。你不想解析HeH 吗? e.g:

compare

另请注意,您应该使用if(compare.length() >= 2 && compare.substr(0, 2) == "//") 作为循环条件,而不是评论中提到的std::getline(readfile, compare)。外!readfile.eof()应为while