如何检查getline是否有空行?

时间:2014-03-15 05:06:27

标签: c++ string newline getline

我想知道如何检查getline函数是否允许string bufferifstream输入: getline(input, buffer) ,存储一个空行?

所以我想说:

Hello

How are you

那么,如果我正在处理换行符,我如何根据string buffer进行识别?我需要这个来在更复杂的文件中进行格式化检查。感谢。

2 个答案:

答案 0 :(得分:1)

获得string buffer后,您可以查看:

if (get_trimmed_string(buffer).length == 0)
{
    // this line is a blank line, or contains only spaces/tabs
}

修剪空格或制表符的功能可以是:

// delete spaces/tabs in head and tail of str
string get_trimmed_string(string str)
{
    int s=str.find_first_not_of(" \t");
    int e=str.find_last_not_of(" \t");

    // if do find real content
    if (s!=-1 && e!=-1)
        return str.substr(s, e-s+1);

    return "";
}

答案 1 :(得分:1)

添加一个函数来检查它是否只有空格字符。

#include <iostream>
#include <string>

bool isBlankLine(char const* line)
{
    for ( char const* cp = line; *cp; ++cp )
    {
        if ( !isspace(*cp) ) return false;
    }
    return true;
}

bool isBlankLine(std::string const& line)
{
   return isBlankLine(line.c_str());
}

int main()
{
   std::string s1 = "Hello";
   std::string s2 = "       ";
   std::string s3 = "How are you";

   std::cout << "Is s1 blank? " << isBlankLine(s1) << std::endl;
   std::cout << "Is s2 blank? " << isBlankLine(s2) << std::endl;
   std::cout << "Is s3 blank? " << isBlankLine(s3) << std::endl;

   return 0;
}

这是输出:

Is s1 blank? 0
Is s2 blank? 1
Is s3 blank? 0