自己动手更换翼搏尾灯及灯罩

车的尾灯罩被撞坏了,发现的时候可能都过了几天了,还是一个搭车小伙伴告诉我车灯破了,自己可能还要过好久才发现呢。

如图,灯泡都裸露在外面啦。试了下灯光,发现下面那个透明的灯泡(刹车灯)已经坏了,上面黄色的灯(转向灯)还能用。

网上搜了下,好像4S店要600+,外面的修车店也要400+,然后自己某宝买来自己装的话只要200就够了。

像我这样天(吃)生(饱)爱(了)捣(撑)鼓(着)的人,肯定是选择买一个自己装啦。

选了个杭州的店家,第二天就到货了。

Read More

wordpress迁移到Hexo遇到的问题

  1. wordpress内容导出不完全
    可能是服务器主机的内存有限?
    最后在本地搭了个wordpress环境,并导入数据库。然后再本地的wordpress dashboard中进行导出,成功。

  2. 运行hexo migrate wordpress (source)出错
    JS-YAML: can not read a block mapping entry; a multiline key may not be an implicit key at line 2, column 5:
    date: 2012-09-30 12:58:01
    ^
    是因为某一篇文章的title中有引号导致的,去除引号之后,搞定

  3. 运行hexo generate出错

    Read More

宏定义(#define)总结

简单的宏替换:

#define forever for(;;) // 无限循环

带参数的宏定义:

#define MAX(a, b) ((A) > (B) ? (A) : (B))

注意要加括号以保证计算次序的正确性

在C表标准库中,很多实用宏的例子,比如stdio.h中的getchar和putchar,还有ctype.h中的函数,islower/isupper/…等等

还有就是条件包含和条件编译

itoa和atoi

再贴个自己写的itoa和atoi:

[c]

#include <cstdio>

#include <cstring>

#include <cctype>

void reverse(char s[])
{
int n = strlen(s);
for (int i = 0, j = n-1; i < j; i++, j–)
{
char c = s[i];
s[i] = s[j];
s[j] = c;
}
}

int atoi(char s[])
{
int i, n, sign;
for (i = 0; isspace(s[i]); i++)
;
sign = (s[i] == ‘-‘)?-1:1;
if (s[i] == ‘-‘ || s[i] == ‘+’)
i++;
for (n = 0; isdigit(s[i]); i++)
n = 10n + (s[i] - ‘0’);
return n
sign;
}

void itoa(int n, char s[])
{
int i = 0, sign = n;
if (n < 0) n = -n;
do
{
s[i++] = n%10 + ‘0’;
n /= 10;
}while(n);
if (sign < 0) s[i++] = ‘-‘;
s[i] = ‘\0’;
reverse(s);
}

int main()
{
char s[20];
printf("%d\n", atoi("-525"));
itoa(-525, s);
printf("%s\n", s);
}
[/c]

atoi是stdlib.h中的函数,而itoa不属于标准函数,我的atoi没有考虑溢出问题,如果要考虑,写起来还挺麻烦的,具体可以参考标准库中的实现。

itoa上次面试的时候碰到了,没有想到逆序输出,最后reverse这种方法,这个方法是在K&R的经典C中发现的,看来以前看书不认真啊= =

二分搜索

好吧,来贴个自己写的二分搜索代码(包括普通的二分、返回第一个出现位置的二分、以及返回最后一个出现位置的二分):

[c]

#include <cstdio>

#include <cstdlib>

int bs_left(int *a, int n, int x)
{
int l, h, m;
l = -1;
h = n;
while(l+1 != h)
{
m = l + (h-l)/2;
if (x < a[m])
h = m;
else
l = m;
}
if (l == -1 || a[l] != x) return -1;
return l;
}

int bs_right(int *a, int n, int x)
{
int l, h, m;
l = -1;
h = n;
while(l+1 != h)
{
m = l + (h-l)/2;
if (x > a[m])
l = m;
else
h = m;
}
if (h == n || a[h] != x) return -1;
return h;
}

int bs(int *a, int n, int x)
{
int l, h, m;
l = 0;
h = n-1;
while(l <= h)
{
m = l + (h-l)/2;
if (x < a[m])
h = m-1;
else if (x > a[m])
l = m+1;
else
return m;
}
return -1;
}

main()
{
int n;
int x;
scanf("%d", &n);
int a = (int)malloc(sizeof(int)*n);
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
scanf("%d", &x);
printf("any:%d\n", bs(a, n, x));
printf("first:%d\n", bs_right(a, n, x));
printf("last:%d\n", bs_left(a, n, x));
}
[/c]

在《C标准库》里看了stdlib.h中bsearch的实现,和我的bs是类似的,标准库也就“不过如此”了,忽忽