leetcode[157] Read N Characters Given Read4

题目意思是给你一个read4的函数,实现一个readn的函数。

一开始题目一直没搞懂,原来,read4(buf) 是指,读4个字符存到buf,或者读剩下的不足四个的字符,返回的数字是存到buf里的字符数。

没有买书,只能网上看看别人分享的代码:

// 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) {

        char buffer[5];

        int cnt = 0;

        while (cnt < n) {

            int sz = read4(buffer);

            memcpy(buf + cnt, buffer, sz);

            cnt += sz;

            if (sz < 4) break;

        }

        if (cnt > n) {

            buf[n] = '\0';

            cnt = n;

        }

        return cnt;

    }

};

需要注意的是,跳出while后,需要判断读的数字是不是超过n了,因为我们只实现readn,要返回的数字最多就是n,存到buf里的也最多是n个字符。

所以如果cnt大于n了,那么buf里面就要将buf[n]设置为末尾也就是‘\0’

顺便提下,memcpy在<string.h>头文件里,是c的,应该可以用strncpy代替

 

你可能感兴趣的:(character)