zoukankan      html  css  js  c++  java
  • std::istream 和 '\r' 力为的技术博客 C++博客

    std::istream 和 '\r' - 力为的技术博客 - C++博客

        std::istream 和 '\r'

        用std::getline可以从stream中读取一行数据, 默认的行结束符号为'\n'。
        最近遇到这样一种情况:使用getline处理有相同text内容的std::ifstream和std::istringstream时,得到的结果有差异。从std::istringstream中返回的一行会多出一个不可见的'\r'符号。

        对于用记事本创建的text文件,每一行用\r\n表示。当用std::ifstream读取的时候,std::ifstream内部会处理\r\n为\n,只少从结果上看是这样。当把整个文件读入buffer中,再用std::istringstream处理的时候,\r仍然被保留着。

        而\r多数情况下是多余的,因此需要处理掉。新的读取行的函数如下:
        std::istream &  readline(std::istream &  stream, std:: string &  szLine)
        {
          using    namespace  std;
         getline(stream, szLine);
          //  erase '\r'
         szLine.erase(find(szLine.begin(), szLine.end(),  ' \r ' ), szLine.end());
          //  ignore the empty lines
          if (szLine.empty()  &&  stream)
          readline(stream, szLine);
         
          return  stream;
        }
        posted on 2006-06-08 15:40 力为 阅读(1560) 评论(3)  编辑 收藏 引用 所属分类: 4. C++ FAQ
        评论
        # re: std::istream 和 '\r' 2006-06-09 08:39 3×7=51
        很明显你在把文件读入buffer的时候一定是在binary模式下读入的。这样得到这种结果很正常。不知道我有没有说错。  回复  更多评论
         
        # re: std::istream 和 '\r' 2006-06-09 22:02 力为
        to 3×7=51:
        You are right! 3Q!  回复  更多评论
         
        # re: std::istream 和 '\r' 2011-09-07 08:12 555
        std::ifstream内部会处理\r\n为\n,可以用在LINUX和WINDOWS转换上,
        LINUX文本文件换行为\N  回复  更多评论
  • 相关阅读:
    【剑指offer】19 顺时针打印矩阵
    【剑指offer】18 二叉树的镜像
    【剑指offer】17 树的子结构
    【剑指offer】16 合并两个排序的链表
    【剑指offer】15 反转链表
    【剑指offer】14 链表中倒数第k个结点
    【剑指offer】13 调整数组顺序使奇数位于偶数前面
    【剑指offer】12 数值的整数次方
    【剑指offer】11 二进制中1的个数
    数据库-第九节:ORM模型迁移
  • 原文地址:https://www.cnblogs.com/lexus/p/2875818.html
Copyright © 2011-2022 走看看