【问题标题】:Portable char newline便携式字符换行符
【发布时间】:2012-06-27 14:18:10
【问题描述】:

有没有办法编写一个跨平台解析器来读取字符直到找到换行符?我在 Linux 中使用 '\0',但我不确定这是否也可以在 Windows 上完成。

std::string line;
// fill the line
QTextStream ss(&line);

for(;;)
{
    ss >> c;
    if(c == '"' || c=='\0' ) // here I want to continue parsing until a new-line character or a ending double quote is found 
        break;
}

【问题讨论】:

  • 你知道\0 不是换行符吧?
  • 不能先使用std::getline从流中获取一行然后解析吗?
  • 如果您使用标准流进行格式化输入,那么 '\n' 是您的事……我猜 Qt 也是如此。

标签: c++ c qt stream newline


【解决方案1】:

C 中的换行符是 '\n' 而不是 '\0'。它将转换为当前平台使用的任何内容。

【讨论】:

  • @UmNyobe 标准库不应该透明地“翻译”它吗?
  • 他正在使用 Qt。我认为它的行为类似于标准库,但我没有确凿的证据。但值得一提,不是吗?
【解决方案2】:

如果您正在使用 C++ 文本流(std::istreamstd::ostream,除非在打开文件流时设置了 ios_base::binary 标志),那么 C++ 会在平台中处理 \n 的输入和输出- 独立的方式。

这意味着在 Windows 上读取包含@​​987654326@ 的文件会将其视为\n,同样输出\n 将输出特定于平台的换行符。

如果需要读取连续的行,最简单的方法是使用getline

std::string line;
while (getline(std::cin, line)) {
    // process line
}

\0从不被视为换行符。

【讨论】:

    猜你喜欢
    • 2012-01-31
    • 2013-08-25
    • 2010-10-17
    • 2011-02-14
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    相关资源
    最近更新 更多