使用c ++忽略读取文件中的换行符

时间:2017-10-17 20:59:05

标签: c++ string newline getline

我有这段代码:

#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;
}

文件&#34; test&#34;填充数字,由不同数量的空格分隔。我需要逐个读取数字,省略空格和换行符。此代码省略了空格,但没有省略换行符。

这些是输入文件中的几行&#34; test&#34;:

     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;
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

std::ifstream path("test");
int number;
while(path >> number)
    std::cout << number << ", ";
std::cout << "END\n";
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 line\n";
    }
    std::cout << "\n";
    return 0;
}