题目:
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.
思路:
题目的思路不是很难,主要是判断各个终止条件:如果还有剩余的字符需要读取(n > 0),那么就调用API函数进行读取。读取之后需要判断返回值,一旦发现返回值为0,说明文件中的内容已经被全部读取,则提前返回。否则就需要判断返回值和剩余需要读取的字符的大小,根据比较的结果向buffer中复制读取的内容,并且更新n的值。
代码:
// 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
*/
int read(char *buf, int n) {
int ret = 0;
char temp[4];
while(n > 0) { // still have content to read
int num = read4(temp);
if(num == 0) { // nothing left to read
break;
}
if(n > num) { // put all the content to buffer
for(int i = 0; i < num; ++i) {
buf[ret++] = temp[i];
}
n -= num;
}
else { // only partial contents are left to put into the buffer
for(int i = 0; i < n; ++i) {
buf[ret++] = temp[i];
}
n = 0;
}
}
return ret;
}
};