大牛们,来看看这道特大公司的题

a
antilawyer
楼主 (未名空间)

假设下面的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
xiaoduoduo

你这个i从哪里来的
e
edison2012

在stream里面先写string旳长度,再写string。
【 在 antilawyer (antilawyer) 的大作中提到: 】
: 假设下面的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
antilawyer

对不起,正确的code应该这样的

void writeString(Stream* stream, const std::string& string)
{
for(auto c : string)
stream.writeChar(c);
}

【 在 xiaoduoduo (水佬倌) 的大作中提到: 】
: 你这个i从哪里来的

h
helpme

前面有人说了,这就是最简单的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最大值的话,可以多次读写,要再讨论。

【 在 antilawyer (antilawyer) 的大作中提到: 】
: 对不起,正确的code应该这样的
: void writeString(Stream* stream, const std::string& string)
: {
: for(auto c : string)
: stream.writeChar(c);
: }