Friday, March 6, 2015

158 Read N Characters Given Read4 II - Call multiple times

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 may be called multiple times.

// 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(){
         start=0;end=0;
     }
     bool isEmpty(){
         return start==end;
     }
    int read(char *buf, int n) {
        int res=0;
        while(res<n && !isEmpty()){
            buf[res]=buffer[start];
            start++;
            start %=5;
            res++;
        }
        while(res<n){
            int count = read4(buf+res);
            res += count;
            if (count<4)
                break;
        }
        if (res>n){
            for (int i=n;i<res;i++){
                buffer[end]=buf[i];
                end = (end+1)%5;
            }
            res = n;
        }
        return res;
    }
private:
    int buffer[5];
    int start;
    int end;
};

No comments:

Post a Comment