a********r 发帖数: 218 | 1 假设下面的class已经写好了,你可以直接用
class Stream {
public:
virtual void writeChar(char c) = 0;
virtual char readChar() = 0;
};
现在要你写下面的code
void writeString(Stream* stream, const std::string& string)
{
for(auto c : string)
stream.writeChar(string[i]);
}
问题是,还有在上面的code加一些什么,你就能知道这个const std::string& string
已经写完了。当你接下来读这个const std::string& string的时候你就能根据这个信
息把整个const std::string& string读出来。你只能用class stream, 不能另加
global variable 什么的。 |
x********o 发帖数: 2092 | |
e********2 发帖数: 495 | 3 在stream里面先写string旳长度,再写string。
【在 a********r 的大作中提到】 : 假设下面的class已经写好了,你可以直接用 : class Stream { : public: : virtual void writeChar(char c) = 0; : virtual char readChar() = 0; : }; : 现在要你写下面的code : void writeString(Stream* stream, const std::string& string) : { : for(auto c : string)
|
a********r 发帖数: 218 | 4 对不起,正确的code应该这样的
void writeString(Stream* stream, const std::string& string)
{
for(auto c : string)
stream.writeChar(c);
}
【在 x********o 的大作中提到】 : 你这个i从哪里来的
|
h****e 发帖数: 2125 | 5 前面有人说了,这就是最简单的encoding/decoding:“
void writeString(Stream& stream, const std::string& s)
{
char l = (char) s.length();
stream.writeChar(l);
for (auto c : s)
stream.writeChar(c);
}
std::string readString(const Stream& stream)
{
int l = (int) stream.readChar();
std::string t;
for (auto i = 0; i < l; ++i)
t += stream.readChar();
return t;
}
”
如果输入string特别长size超过char最大值的话,可以多次读写,要再讨论。
【在 a********r 的大作中提到】 : 对不起,正确的code应该这样的 : void writeString(Stream* stream, const std::string& string) : { : for(auto c : string) : stream.writeChar(c); : }
|