-6ren">
gpt4 book ai didi

c++ - 重载 << 运算符将 ""更改为 "\n"

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:12 26 4
gpt4 key购买 nike

我正在尝试重载

<<

运营商。比如

cout << a << " " << b << " "; // I am not allowed to change this line

我必须按格式打印它

<literal_valueof_a><"\n>
<literal_valueof_b><"\n">
<"\n">

我试图重载 << 运算符,将字符串作为参数,但它不起作用。所以我猜是字面意思

" "

不是字符串。如果不是那么它是什么。以及如何重载它?请帮忙;

完整代码

//Begin Program
// Begin -> Non - Editable
#include <iostream>
#include <string>
using namespace std;

// End -> Non -Editable
//---------------------------------------------------------------------
// Begin -> Editable (I have written )
ostream& operator << (ostream& os, const string& str) {
string s = " ";
if(str == " ") {
os << '\n';
}
else {
for(int i = 0; i < str.length(); ++i)
os << str[i];
}
return os;
}

// End -> Editable
//--------------------------------------------------------------------------
// Begin -> No-Editable
int main() {
int a, b;
double s, t;
string mr, ms;
cin >> a >> b >> s >> t ;
cin >> mr >> ms ;
cout << a << " " << b << " " ;
cout << s << " " << t << " " ;
cout << mr << " " << ms ;

return 0;
}
// End -> Non-Editable
//End Program

输入和输出输入

 30 20 5.6 2.3 hello world 

输出

30
20
5.6
2.3
hello
world

最佳答案

" "是长度为 1 的字符串文字,因此类型为 const char[2] . std::string不相关。

理论上,您可以将其重载为:

auto& operator<<(std::ostream& os, const char (&s)[2]) {
return os << (*s == ' ' && !s[1] ? +"\n" : +s);
}

虽然这胜过所有其他重载,但现在事情变得非常棘手。问题是 some_ostream << " "可能并不少见,即使在模板中也是如此,现在不再解析为调用 the standard function .这些模板现在在受影响的翻译单元中具有与未受影响的翻译单元不同的定义,因此违反了单一定义规则。

您应该做的,不是尝试将全局解决方案应用于非常局部的问题:

最好修改当前流式传输空格字符的代码。
或者,编写您自己的流缓冲区,根据需要将其转换为换行符。

关于c++ - 重载 << 运算符将 ""更改为 "\n",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52620119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com