如何使用运算符在一个ostream中写入多少个字符?或者如何读取所写的内容?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用运算符在一个ostream中写入多少个字符?或者如何读取所写的内容?相关的知识,希望对你有一定的参考价值。

1) 我想在运算符<<中重载,这样我就可以打印模板矩阵T.

我想使用模板类的运算符<<并且要对齐它我必须知道写入的字符数,并在最后添加空格直到一定数量的字符。

但是,我不知道我怎么能(如果可以的话)获得写入的字符串或写入的字符数...


2) 我需要表演

cout << myobject  

好几次。但是,这个运算符<<花了很多时间,所以我只想一次并存储它的结果。我该怎么做才能避免一遍又一遍地使用相同的方法?

有任何想法吗?

答案

第一个问题的解决方案。

  1. 使用std::ostringstream写入矩阵的元素。
  2. std::string获取std::ostringstream
  3. 编写一个函数,在字符串的左侧或右侧添加填充,以便生成的字符串具有给定的长度。
  4. 使用填充字符串在std::coutstd::ofstream中创建最终输出。
另一答案

一般来说,你不能。 std::ostream提供的最相似的东西是tellp方法,它为您提供当前文件中的位置。不幸的是,当你关心与上一个换行相关的位置时,这对你没有帮助;此外,在许多常见情况下,甚至没有实现此方法(标准输出“文件”中的位置,或插槽中的位置?)。

至于提取所写的内容,不再是。底层的streambuf不必保留这些数据 - 事实上,它甚至可以在写入时立即刷新到每个单个字符的底层设备(这几乎与无缓冲输出一样)。

另一答案

这样的事情会引起什么兴趣吗?

│1         2         300       │
│1         463       6         │
│165       286       34457     │

│1.000000  0.000000  0.000000  │
│0.000000  1.000000  0.000000  │
│0.000000  0.000000  1.000000  │

│Hello     World!    This      │
│is        a         test      │
│to        create    spaces    │

代码很粗糙,您可能需要调整它以补偿32位和64位。

我认为你也可以修改它,以便你可以使用tabbing,默认情况下占用8个空格。

在线代码示例:https://rextester.com/IFXUFZ49322

以上是关于如何使用运算符在一个ostream中写入多少个字符?或者如何读取所写的内容?的主要内容,如果未能解决你的问题,请参考以下文章

第四周:运算符重载

c++中重载输出操作符,为啥要返回引用

如何将数组和输出转移到 ofstream 写入?

使用“+”运算符进行字符串连接后会创建多少个对象?

命名空间中的ostream operator <<隐藏其他ostream :: operator [duplicate]

错误:“ostream”没有命名类型