The API: int read4(char *buf)
reads 4 characters at a time from a file.
The return value is the actual number of characters read. For example, it returns 3 if there is only 3 characters left in the file.
By using the read4
API, implement the function int read(char *buf, int n)
that reads n characters from the file.
Note:
The read
function will only be called once for each test case.
目前最恶心一题,刚开始根本看不懂题,后来看了答案才知道这题要干嘛。他给了read4(char *buf) 函数不知道从哪里的一个文件读取4个字符到数组buf并返回实际读到的字符数。read(char *buf, int n) 函数是要从刚才的那个文件里读n个字符到buf。
这里要考虑你每次调用read4只能读4个字符,如果没读到文件末尾时,肯定每次返回都是4,如果到结尾时,字符数剩余小于4时,返回数值小于4。还要考虑n是不是大于这个文件的总字符大小。
知道这些,就可以看下面的解法了。
/* The read4 API is defined in the parent class Reader4.
int read4(char[] buf); */
public class Solution extends Reader4 {
/**
* @param buf Destination buffer
* @param n Maximum number of characters to read
* @return The number of characters read
*/
public int read(char[] buf, int n) {
char[] buffer = new char[4];
int endoffile = 0;
int lenread = 0;
while (lenread < n && endoffile == 0) {
int currentread = read4(buffer);
if (currentread != 4) {
endoffile = 1;
}
int length = Math.min(n - lenread, currentread);
for (int i = 0; i < length; i++) {
buf[lenread + i] = buffer[i];
}
lenread += length;
}
return lenread;
}
}