如何在c++中识别空行

  • 本文关键字:识别 c++ c++ file input
  • 更新时间 :
  • 英文 :


我正在从文件中读取信息。我需要一个计数器来计算有多少文本填充行。我需要计数器停止,如果有任何空白行(即使有文本填充行后的空白行)。

我该怎么做呢?因为我不太确定如何识别空行来停止计数器

如果您正在使用std::getline,那么您可以通过检查您刚刚读取的std::string是否为空来检测空行。

std::ifstream stream;
stream.open("file.txt");
std::string text;
while(std::getline(stream,text))
    if(!text.size())
        std::cout << "empty" << std::endl;

我建议使用std::getline:

#include <string>
#include <iostream>
int main()
{
    unsigned counter = 0;
    std::string line;
    while (std::getline(std::cin, line) && line != "")
        ++counter;
    std::cout << counter << std::endl;
    return 0;
}

因为@Edward做了一个关于处理空白的评论,它可能很重要。当只有空格的行也被认为是"空行"时,我建议将其更改为:

#include <string>
#include <iostream>
#include <algorithm>
#include <cctype>
int main()
{
    unsigned counter = 0;
    std::string line;
    while (std::getline(std::cin, line) &&
           std::find_if_not( line.begin(), line.end(), std::isspace != line.end()) {
        ++counter;
    }
    std::cout << counter << std::endl;
    return 0;
}

它相当冗长,但优点是它使用std::isspace来处理所有不同类型的空格(例如' ', 't', 'v'等),并且您不必担心是否正确处理它们。

在c++ 11中可以使用

std::isblank

在循环中,将所有行逐一读取到单个string变量中。您可以使用std::getline函数。

每次将一行读入该变量后,检查其length。如果为零,则该行为空,在这种情况下,break循环。

然而,检查空行并不总是正确的事情。如果您确定这些行为空,那么就可以了。但是如果你的"空"行可以包含空格,

123 2 312 3213
12 3123 123
              // <---  Here are SPACEs. Is it "empty"?
123 123 213
123 21312 3

那么你可能不需要检查"零长度",而是检查是否"所有字符都是空白"。

没有错误检查,没有保护,只是一个简单的例子…它没有经过测试,但你得到了要点。

#incldue <iostream>
#include <string>
using namespace std;
int main()
{
  string str = "";
  int blank = 0, text = 0;
  ifstream myfile;
  myfile.open("pathToFile");
  while(getline(myfile,str))
  {
    if(str == "")
    {
      ++blank;
    }
    else
    {
      ++text;
    }
  }
  cout << "Blank: " << blank << "t" << "With text: " << text;
  return 0;
}

只需检查字符串长度并使用行计数器。当字符串长度为零(即字符串为空)时,打印行计数器。提供示例代码供您参考:

// Reading a text file
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main () {
    string line;
    ifstream myfile ("example.txt");
    int i = 0;
    if (myfile.is_open())
    {
        while (getline (myfile, line))
        {
            i++;
            // cout << line << 'n';
            if (line.length() == 0)
                break;
        }
        cout << "blank line found at line no. " << i << "n";
        myfile.close();
    }
    else
        cout << "Unable to open file";
     return 0;
}

相关内容

  • 没有找到相关文章

最新更新