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.
I比较简单,需要考虑两个边界值,一个是文件读完,即read4返回值小于4的情况,第二个是当n要读完而此时读到的char为read4中间值的时候,即我们不需要读取全部的read4字符就可以完成时,代码:
public int readI(char[] buf, int n) { for(int i=0;i<n;i+=4){ char[] temp=new char[4]; int len=read4(temp); System.arraycopy(temp,0,buf,i,Math.min(n-i,len)); if(len<4) return Math.min(i+len,n); } return n; }
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.
private Queue<Character> queue=new LinkedList<>(); public int read(char[] buf, int n) { int m=0; while(m<n&&!queue.isEmpty()){ buf[m++]=queue.poll(); } for(int i=m;i<n;i+=4){ char[] temp=new char[4]; int len=read4(temp); if(len>n-i){ System.arraycopy(temp,0,buf,i,n-i); int k=len-n+i; for(int index=k;index<len;index++) queue.offer(temp[index]); } else System.arraycopy(temp,0,buf,i,len); if(len<4) return Math.min(i+len,n); } return n; }