我正在从文件中读取信息。我需要一个计数器来计算有多少文本填充行。我需要计数器停止,如果有任何空白行(即使有文本填充行后的空白行)。
我该怎么做呢?因为我不太确定如何识别空行来停止计数器
如果您正在使用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;
}