std::istream 和 '\r' - 力为的技术博客 - C++博客
2013-01-24 22:58
555 查看
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 回复 更多评论
用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 回复 更多评论
相关文章推荐
- 用lambda对std::list排序 - 力为的技术博客 - C++博客
- 【找茬】split string - 力为的技术博客 - C++博客
- 失足于shared_ptr - 力为的技术博客 - C++博客
- reserve和resize - 力为的技术博客 - C++博客
- Goodbye, VC Intellisense ! - 力为的技术博客 - C++博客
- 用wxWidgets做界面 - 力为的技术博客 - C++博客
- 用istringstream 解决问题一则 - 力为的技术博客 - C++博客
- memcached使用的几个限制 - C++ 技术中心 - C++博客
- c/c++ 国外技术博客
- C++ 初始化函数的实现 - Ling Xu 的 C++ 技术随笔 - C++博客
- 现代C++的回调技术--使用std::bind和std::function
- LinuxC/C++编程基础(35) std::istream使用实例
- C++的std::string的“读时也拷贝”技术!
- 七叶树之技术博客 C++的常用库(转载)
- 枚举串口四法 - franksunny的个人技术空间 - C++博客
- 【C/C++相关】论程序员写技术博客的重要性
- 推荐C++技术博客 各种C++问题
- C++的std::string的“读时也拷贝”技术!
- C++的std::string的读时也拷贝技术!
- 从半同步-半异步模式谈服务器的设计 - 那谁的技术博客 - C++博客