如何在C ++中从ifstream读取时检测空行

时间:2016-04-08 12:02:44

标签: c++ file ifstream

当我从文件中读取时,我想要检测空行。我尝试了line.empty()line.size()==0以及line=="",但这些都不适用于我。

有什么建议吗?

void readFile(const string & fn){
    ifstream fichier;
    string line;
    try{
        fichier.open(fn.c_str(),ifstream::in);
        while(getline(fichier,line))
        {
            if(line.empty())// i tried also line=="" and line.size()==0
            {
                cout<<"empty line!!"<<endl;
            }
            else{
                cout<<"Line:"<<line<<endl;
            }
        }
        fichier.close();

    }catch(const string & msg){
        if(fichier.is_open()) fichier.close();
        cout<<"Error !!";
    }
}

1 个答案:

答案 0 :(得分:0)

您可以这样做:

string buffer;
getline(fichier, buffer, '\n);
if(isEmpty(buffer)){
  //do whatever
}

如果您确定您的行是完全空的(即没有空格,制表符或非文本字符,那么您的isEmpty函数可能类似于 return buffer=="";

如果它更复杂,并且你的新行可以包含像\ t这样的字符,你可以这样做:

bool isEmpty(string buffer){
  for (int i = 0; i<buffer.length(); i++{
    if (buffer[i] != '\t') //add chars you want to exempt here
      return false;
  }
return true;
}