我太菜了

喜欢写Hello World的未来程序员.

C++使用ssl发送https请求

使用ssl访问

渐行渐远渐无书 水阔鱼沉何处问 最近用C++写爬虫,发现很不对劲。。。因为大部分网站都换成了https,每次获得的响应都是302。。 提示重定向到他们的https站点上去,这太伤人心了,搞了半天,居然访问不了。 当然不能这么放弃了,于是各种搜,终于明白了,https请求如何发出去和收到响应。 总的来说,需要经过以下步骤: 初始化OpenSSL 创建CT...

表示数值的字符串

你快乐吗?

愿我如星君如月 夜夜流光相皎洁 C++,字符串处理,这种题不难,就是繁琐,分两种情况讨论。 使用科学计数法,即有E/e字母: E前面为小数或者整数,E后面只能为整数 小数和整数前面可以出现一次+/- 小数里边可以出现一次.符号 不适用科学计数法,没有E字母: 可以出现一次.符号 ...

http响应报文的长度

我太难了

当时明月在 曾照彩云归 HTTP1.0 http1.0因为是短连接,所以是没有keepalive的,对方会直接close()掉。 也就是: while (read()/recv() == -1) ... 对方close()后收到的就是-1。 HTTP1.1 HTTP 1.1标准给出了如下方法(按照优先级依次排列): 响应状态(Response S...

顺时针打印矩阵

你快乐吗?

顺时针打印矩阵 C++,老题了。 class Solution { public: vector<int> printMatrix(vector<vector<int> > matrix) { vector<int> ans; if (matrix.empty()) return ans; ...

链表中倒数第k个结点

你快乐吗?

链表中倒数第k个结点 C++,链表。 如果走两趟,会超市,肯定也不符合题目的意思。 走一趟的办法: 让一个指针跑到第k-1个结点; 第二个指针指向第一个结点; 两个指针一起走; 如果前一个指针走到了最后一个结点,那么后一个指针的位置就是倒数第k个结点的位置。 然后注意一些特殊情况,比如k很大,比如链表为空的情况。 代码如下: /* struct ListNo...

重建二叉树

你快乐吗?

重建二叉树 以下思路参考柳婼文章:已知后序与中序输出前序(先序) C++。首先要知道一个结论,前序/后序+中序序列可以唯一确定一棵二叉树,所以自然而然可以用来建树。 看一下前序和中序有什么特点,前序1,2,4,7,3,5,6,8 ,中序4,7,2,1,5,3,8,6; 有如下特征: 前序中左起第一位1肯定是根结点,我们可以据此找到中序中根结点的位置rootin; ...

连续子数组的最大和

你快乐吗?

连续子数组的最大和 C++,最大连续子列和,在线处理算法。 非常经典的题目啦,其实用dp也很简单,不过在线处理算法不用额外空间显然更胜一筹。 思路: 遍历序列,用变量tsum记录包含当前位置的连续子列和,ans记录序列的最大连续子列和; 如果包含当前元素,能让tsum大于ans,则更新ans为tsum; 如果包含当前元素,tsum < 0,则说明tsum从下一个位...

跳台阶

你快乐吗?

跳台阶 C++,动态规划。动态规划按我的理解就是当前点最优解和之前的最优解有确定的关系,可以通过这个关系确定当前最优解,从而确定最后的最优解。我们写代码要做的就是把每个点的最优解记录下来,本题思路如下: 要跳上跳上第i级台阶,一定是从第i-1级或者i-2级跳上来的; 也就是说跳上第i级台阶的跳法,一定是跳上第i-1级和i-2级的跳法的和; 用代码语言就是dp[i] = ...

调整数组顺序使奇数位于偶数前面

你快乐吗?

调整数组顺序使奇数位于偶数前面 C++,数组考点。 思路: 维护一个范围[left, right],在范围里从左到右扫描,直到碰到的第一个奇数odd_num,然后让扫描到的偶数都右移一个位置。最后将范围左端赋值为odd_num; 修改范围为[left+1, right]; 重复第一步。 代码如下: class Solution { public: void ...

翻转单词顺序列

你快乐吗?

翻转单词顺序列 C++,翻转单词,先把整体翻转,再单独翻转就好了。 class Solution { public: string ReverseSentence(string str) { reverse(str.begin(), str.end()); int i = 0, j = 0; for ( ; i < str.l...