想了好一会才看懂题目意思,应该是:
这里指的可以调用更多次,是指对一个文件多次操作,也就是对于一个case进行多次的readn操作。上一题是只进行一次reandn,所以每次返回的是文件的长度或者是n,并且将相应的字符存在buf里。现在调用多次的话就可能存在以下的例子:
例如文件case是:1,2,3,4,5,6,7
如果要实现read5,先用read4读四个到buf,再用read4读剩下的3个到buf+4之后,但是read5一次最多读5个到buf,所以read4多读的2个就要存起来,防止下次调用read5的时候用。
参见 这里 ,用全局变量记录之前访问的是否有溢出。
//
Forward declaration of the read4 API.
int
read4(
char
*
buf);
class
Solution {
public
:
/*
*
* @param buf Destination buffer
* @param n Maximum number of characters to read
* @return The number of characters read
*/
Solution() : buf_len(
0
) {
}
int
read(
char
*buf,
int
n) {
char
buffer[
5
];
int
cnt =
0
;
if
(buf_len >
0
) {
memcpy(buf, _buf, min(buf_len, n));
cnt
+=
min(buf_len, n);
if
(n <
buf_len) {
memcpy(_buf, _buf
+ n, buf_len -
n);
buf_len
-=
n;
}
else
{
buf_len
=
0
;
}
}
int
sz;
while
(cnt <
n) {
sz
=
read4(buffer);
memcpy(buf
+
cnt, buffer, sz);
cnt
+=
sz;
if
(sz <
4
)
break
;
}
if
(cnt >
n) {
buf[n]
=
'
\0
'
;
buf_len
= cnt -
n;
memcpy(_buf, buffer
+ (sz-
buf_len), buf_len);
cnt
=
n;
}
return
cnt;
}
private
:
int
buf_len;
char
_buf[
5
];
};
leetcode[158] Read N Characters Given Read4 II - Call multiple times

