以下是我的文件数据排列方式
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;
}
我没有任何东西给我留空。
我很困惑。我想要检测这个空白行怎么办? 请帮忙!
答案 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];