使用 c++ 读取文件时省略换行符

Omit the newline character in reading file with c++

本文关键字:换行符 时省 文件 c++ 读取 使用      更新时间:2023-10-16

我有这个代码:

#include <iostream>
#include <string>
#include <fstream>
int main()
{
    std::ifstream path("test");
    std::string separator(" ");
    std::string line;
    while (getline(path, line, *separator.c_str())) {
        if (!line.empty() && *line.c_str() != 'n') {
            std::cout << line << std::endl;
        }
        line.clear();
    }
    return 0;
}

文件"test"由数字填充,由不同数量的空格分隔。我只需要一个接一个地阅读数字,省略空格和换行符。此代码省略空格,但不省略换行符。

这些是输入文件"test"中的几行:

     3        19        68        29        29        54        83        53
    14        53       134       124        66        61       133        49
    96       188       243       133        46       -81      -156       -85

我认为问题是这个*line.c_str() != 'n'不是确定字符串是否line命中换行符并且程序继续打印换行符的正确方法!

这个效果很好:

#include <iostream>
#include <string>
#include <fstream>
int main()
{
    std::ifstream path("test");
    std::string separator(" ");
    std::string line;
    while (getline(path, line, *separator.c_str())) {
        std::string number;
        path >> number;
        std::cout << number << std::endl;
    }
    return 0;
}

使用流运算符>>读取整数:

std::ifstream path("test");
int number;
while(path >> number)
    std::cout << number << ", ";
std::cout << "ENDn";
return 0;

这将列出文件中的所有整数,假设它们用空格分隔。

getline的正确用法是getline(path, line)getline(path, line, ' ')其中最后一个参数可以是任何字符。

在这种情况下*separator.c_str()转换为 ' ' .不建议使用此用法。

同样,*line.c_str()指向line中的第一个字符。查找最后一个字符使用

if (line.size())
    cout << line[size()-1] << "n";

使用 getline(path, line) 时,line将不包括最后n字符。

这是另一个带有getline的例子。我们逐行读取文件,然后将每行转换为 stringstream ,然后从每行读取整数:

#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
int main()
{
    std::ifstream path("test");
    std::string line;
    while(getline(path, line))
    {
        std::stringstream ss(line);
        int number;
        while(ss >> number)
            std::cout << number << ", ";
        std::cout << "End of linen";
    }
    std::cout << "n";
    return 0;
}

使用C++内置的 isdigit 函数。