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

佩科夫

我有这个代码:

#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 << "END\n";
return 0;

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

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

*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 line\n";
    }
    std::cout << "\n";
    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当我使用循环时,C如何读取字符和换行符?

从文件 c++ 读取并在需要时写入换行符

如何在使用流读取文件时保留换行符-Java 8

使用php读取文件时删除textarea中的换行符

使用Python读取csv时指定换行符('\ n')

C语言,从外部文件中读取换行符

C ++读取CSV文件,避免换行符

使用换行符读取Java中的.properties文件

在包含换行符的文件上使用gzip时出错

逐字节读取CSV文件时如何检测字节是否为换行符-C#

使用C语言将每个换行符从文件存储为两个零

Spark:使用与换行符不同的分隔符读取文件

使用java.util.Scanner从文件中读取字符串并使用换行符作为分隔符时,字符串的行为异常

Python:通过使用\ n作为换行符来读取文件。文件还包含\ r \ n

每次使用c ++时,使用getchar()获取字符并将它们保存到换行符中

使用C#为Twilio SMS编码换行符?

使用putchar()在整数末尾添加换行符(C编程)?

C使用getline忽略换行符\ n

C-使用fgets直到换行符/ -1

使用换行符中断C ++中的循环

为什么读取时使用默认的IFS和单个变量添加换行符?

使用javascript读取时,textarea值属性会忽略换行符和空格

C#:读取由其他换行符分隔的文本文件

换行符更改从文件读取的字符串在C ++中的打印方式

用\ n(换行符)从文件中读取C拆分字符数组,输出奇怪

C ++从文件中读取,单词之间用空格和换行符分隔

C-无法读取其中没有尾随换行符的文件

当行分隔符是换行符并且csv数据中包含换行符时,如何使用fs readfile读取csv?

在Java中读取文本文件,要检查它使用哪种换行符