使用C ++检测文件中空白行的混淆行为

时间:2017-02-11 22:41:11

标签: c++

以下是我的文件数据排列方式

10 12 19 21 3
11 18 25 2 9

1 3 1
0 5 0
2 1 2

当我使用getline()和istringstream逐行剥离文件时,我关注检测这两个数据块之间的空白行。我需要检测它不要跳过它。

所以我写了

while(getline(fp1,line)){
 if(line.empty()){
 cout<<"empty line"<<endl;
}

它不起作用。我想也许这条线是空的但是包含空格所以我写了

    while(getline(fp1,line)){
 if(line == "\n"){
 cout<<"empty line"<<endl;
}

不工作。我甚至使用line.find_first_not_of(&#39;&#39;)== std :: string :: npos作为条件,仍然没有运气。 然后我想打印出这个空白区域,看看里面有什么。我打印了我所有行的长度,我发现空行的大小为1.所以我写了

if(line.length() == 1){
  cout<<hex<<  line;
  } 

我没有任何东西给我留空。

我很困惑。我想要检测这个空白行怎么办? 请帮忙!

2 个答案:

答案 0 :(得分:1)

您可以将bool变量isBlank设置为true,并在每行输入后在while循环内迭代该行,无论它是否为空白:

std::ifstream in("test.txt");
std::string sLine;
bool isBlank = true;

while(std::getline(in, sLine)){
    isBlank = true;
    for(int i(0); i < sLine.length(); i++){
        if(!isspace(sLine[i])){
            isBlank = false;
            break;
        }
    }
    if(isBlank)
        std::cout << "Blank Line" << std:: endl;
    else
        std::cout << sLine << std::endl;
}

输出:

0 12 19 21 3
11 18 25 2 9
Blank Line
1 3 1
0 5 0
2 1 2

答案 1 :(得分:0)

我认为附加字符可能是回车符(\ r)或其他空白字符。请注意,std :: hex不会影响字符串或字符。要检查它是什么尝试:

cout<<hex<<  (int)line[0];